For each parameter, the data type specified by the caller and the callee must be compatible. For example, an ABL application must specify a 64-bit ABL data type (INT64) when calling a DLL routine that expects a 64-bit signed integer. The ABL program cannot declare the ABL variable as LONG or UNSIGNED-LONG and expect the correct behavior. Similarly, if a DLL routine expects a 32-bit value, the ABL program must specify a 32-bit ABL data type (LONG or UNSIGNED-LONG). The ABL program cannot declare the ABL variable as a SHORT or UNSIGNED-SHORT and expect the correct behavior.
 
      
      
      
      
      
      
      
      
      
      
      
      
      If data-type is 
"DATASET-HANDLE" or 
"TABLE-HANDLE", you can append "
-by-reference" to any previously listed 
iomode.
 
      
      
      The parameter-value argument may represent a determinate or indeterminate array. However, you cannot pass an array by value. You can pass an array only as a variable defined using the DEFINE VARIABLE statement with the EXTENT option. If you include the EXTENT keyword in the 
data-type argument, the AVM ignores it. If you include the array element values in the 
parameter-value argument, ABL generates a compile error.
 
      If iomode is 
"INPUT" or 
"INPUT-OUTPUT", if the data type of 
parameter-value does not agree with the data type passed, 
parameter-value will automatically be converted to the data type passed during SET-PARAMETER( ) processing.
 
      If iomode is 
"OUTPUT" or 
"INPUT-OUTPUT", each of the following must be true:
 
      
        
          
            |  | parameter-value must represent a program variable or a NO-UNDO TEMP-TABLE field (perhaps with an array reference). | 
        
       
      
        
          
            |  | parameter-value must still be in scope and must still be valid when the dynamic invoke is executed. | 
        
       
      
      If iomode is 
"OUTPUT", 
parameter-value is ignored if the ASYNCHRONOUS attribute is TRUE.