fbpx

FOR NEX issue

More
4 months 2 weeks ago #1 by Boonnam S
FOR NEX issue was created by Boonnam S
m_dibs is private variable:

C#
private System.IntPtr[] m_dibs;

or

X#
private m_dibs as IntPtr[]

In the constructor for the class:

m_dibs = new System.IntPtr[0];

or

m_dibs := IntPtr[]{0}

Here is my C# sample code:
//int x = m_dibs.Length;

for (int i = 0; i < m_dibs.Length; i++)
{
      EZTwain.DIB_Free(m_dibs[i]);
}

Here is my X# translation:
x := self:m_dibs.Length
            
for i := 0 upto self:m_dibs.Length
     EZTwain.DIB_Free(self:m_dibs[i])
next

In the C#, since the length is 0 when the class is first instantiated, the code inside the for next loop doesn't run. But in the X#, the line inside the for next loop get executed, which resulted in index out of range error. I also use "to" instead of "upto".

I know I can prevent this by first checking if the length is > 0 before running the for next loop or perhaps initialize i := 1.

I am using Core dialect. "Use Zero Base Arrays" is false at first. I also tried setting to true. Same result.

Is there a similar code for X#?. I thought the index in Core dialect is zero base like C#.


Thanks,
Boonnam

Please Log in or Create an account to join the conversation.

More
4 months 2 weeks ago #2 by Chris Pyrgas
Replied by Chris Pyrgas on topic FOR NEX issue
Hi Boonam,

Are you using zero-based arrays in X#? If yes, then your iteration should be upto length - 1:
for i := 0 upto self:m_dibs.Length - 1

If you think about it, it's the same tha c# does, with the "i < m_dibs.Length" segment in the for command. It uses "<", not "<=", so "i" never reaches "m_dibs.Length".

With the above correction, the loop will not execute at all also in X# for an empty array.

If you're not using zero-based arrays, then (unlike in c# which does not support 1-based array indexing) you'd need to start the loop from element "1":
for i := 1 upto self:m_dibs.Length

In both cases, the result will now be the expected one.

Chris

XSharp Development Team
chris(at)xsharp.eu

Please Log in or Create an account to join the conversation.

More
4 months 2 weeks ago #3 by Boonnam S
Replied by Boonnam S on topic FOR NEX issue
Thank you very much!

Please Log in or Create an account to join the conversation.