Internal Compiler Error: 00000022

SogSog Member Posts: 1,023
Came to this error today:
The C/AL object was not saved in compiled form. Compile it from the Object Designer and run it again.
Internal Compiler Error. Error Code = 00000022 .
Unknown error.

This can occur when working with recordrefs as parameters in functions.
When the parameter is inclosed in brackets() then the error above will appear.
Compiles
myfunction(myrecordref)

Will not compile
myfunction((myrecordref))

Thought I'd share this.
|Pressing F1 is so much faster than opening your browser|
|To-Increase|

Answers

  • LucanacrouseLucanacrouse Member Posts: 1
    Hello,


    I encountered the exact same error message but for another reason :

    It happens when one works with DotNet IEnumerator and function with DotNet parameters.

    Here's the problem and its solution :

    Consider one working with a function that accept any DotNet class, in this example I have taken FileInfo :

    If one iterates through an array of FileInfo with an IEnumerator and then gives the current IEnumerator to the function, he will get this mysterious internal compiler error :
    ===OnRun()
    
    dnArray := dnArray.CreateInstance(GETDOTNETTYPE(dnFileInfo),2);
    
    dnFileInfo1 := dnFileInfo1.FileInfo('C:\Test\dummy1.txt');
    dnArray.SetValue(dnFileInfo1,0);
    dnFileInfo2 := dnFileInfo2.FileInfo('C:\Test\dummy2.txt');
    dnArray.SetValue(dnFileInfo2,1);
    
    dnIEnumerator := dnArray.GetEnumerator;
    
    WHILE dnIEnumerator.MoveNext DO BEGIN
      printFileName(dnIEnumerator.Current);
    END;
    
    
    ===printFileName(VAR _FileInfo : DotNet "System.IO.FileInfo")
    
    MESSAGE(FORMAT(_FileInfo.Name));
    


    To solve the problem : instanciate a DotNet object with the current IEnumerator and give this object to the function :
    dnIEnumerator := dnArray.GetEnumerator;
    
    WHILE dnIEnumerator.MoveNext DO BEGIN
      dnFileInfo := dnIEnumerator.Current;
      printFileName(dnFileInfo);
    END;
    


    Cheers.
Sign In or Register to comment.