Try OpenEdge Now
skip to main content
Programming Interfaces
External Program Interfaces : Shared Library and DLL Support : Passing parameters to a shared library routine : Passing arrays as parameters : INT64 arrays
 
INT64 arrays
OpenEdge also supports passing INT64 EXTENT variables (arrays) to DLL entry points, and supporting INT64 arrays in DLL parameters. These cases follow the same conversion rules for scalar INT64 variables. Specifically:
*An EXTENT of INT64 passed to a BYTE, SHORT, UNSIGNED-SHORT, LONG or UNSIGNED-LONG INPUT DLL parameter constructs an array of the appropriate data type, containing the appropriate low-order byte values. If any of the values in the EXTENT exceed the capacity of the target data type, ABL generates an overflow error.
*An EXTENT of INT64 passed to an INT64 INPUT DLL parameter constructs an array of the same length containing 64-bit integer values.
*An EXTENT of INTEGER passed to an INT64 INPUT DLL parameter constructs an array of 64-bit integers, automatically converting the INTEGER values to INT64 values.
*An EXTENT of INT64 passed to a BYTE, SHORT, UNSIGNED-SHORT, LONG or UNSIGNED-LONG INPUT-OUTPUT DLL parameter constructs an array of the appropriate data type, containing the appropriate low-order byte values. If any of the values in the EXTENT exceed the capacity of the target data type, ABL generates an overflow error at runtime. ABL automatically converts the returned values to INT64.
*An EXTENT of INT64 passed to an INT64 INPUT-OUTPUT DLL parameter constructs an array containing 64-bit integer values.
*An EXTENT of INTEGER passed to an INT64 INPUT-OUTPUT DLL parameter constructs an array of 64-bit integer values, automatically converting the INTEGER values to 64-bit values. ABL automatically converts the returned values from INT64 to INTEGER, removing the high-order bytes where necessary. If any of the extent values are larger than what would fit in an INTEGER, the ABL client generates an overflow error.
*An EXTENT of INTEGER passed to an UNSIGNED-LONG INPUT-OUTPUT DLL parameter constructs an array of 32-bit unsigned integer values. ABL automatically converts the returned values from UNSIGNED-LONG to INTEGER. If any of the extent values are larger than what would fit in an INTEGER, the ABL client generates an overflow error at runtime.
*An EXTENT of INT64 passed to a BYTE, SHORT, UNSIGNED-SHORT, LONG or UNSIGNED-LONG OUTPUT DLL parameter constructs an array of the same length for the appropriate data type. ABL automatically converts the returned values to INT64.
*An EXTENT of INT64 passed to an INT64 OUTPUT DLL parameter constructs an array of 64-bit integers.
*An EXTENT of INTEGER passed to an INT64 OUTPUT DLL parameter constructs an array of 64-bit integers. ABL automatically converts the returned values from INT64 to INTEGER, removing the high-order bytes where necessary. If any of the extent values are larger than what would fit in an INTEGER, the ABL client generates an overflow error at runtime.
*An EXTENT of INTEGER passed to an UNSIGNED-LONG OUTPUT DLL parameter constructs an array of 32-bit unsigned integer values. ABL automatically converts the returned values from UNSIGNED-LONG to INTEGER. If any of the EXTENT values are larger than what would fit in an INTEGER, the ABL client generates an overflow error at runtime.
Note: You cannot pass an array of indeterminate extent to a DLL.