Datatypes
Datatypes like Long/Ulong need to be changed in order to support
64-bit.
LongPtr is not a full-fledged PowerBuilder data type because there
are no pointer operations in PowerBuilder. You can use it to hold/pass
window handles, database handles, and other objects that are essentially
memory addresses, but complex operations on LongPtr type might not
work.
In PowerBuilder 32-bit applications, LongPtr is the same as
Long/ULong, and you can use Long/ULong wherever LongPtr is required. In
64-bit applications, misuse of data types may lead to data truncation
(for example, from 8 bytes to 4 bytes) or memory corruption.
Follow the suggestions below to change Long/ULong to LongPtr or
LongLong for 64-bit applications:
-
If you are passing a Long ref variable when a LongPtr ref is
required, change Long/ULong to LongPtr. -
In complex operations that represent/compute 8-byte long
integers, change Long/ULong to LongLong. LongLong is for 64-bit
signed integers, from -9223372036854775808 to 9223372036854775807.
Keep in mind that
LongLong continues using literals
as integers, but longer numbers are permitted. -
When declaring PowerBuilder functions for using external APIs,
if any of the following condition is met, change Long/ULong to
LongPtr:-
The PowerBuilder function uses Long or ULong to correspond
with the pointer-type parameter or return value of an external
API (that is, the functions’ source definition); -
The PowerBuilder function uses Long or ULong to correspond
with the 64-bit parameter or return value of an external
API; -
The PowerBuilder function uses Long or ULong to correspond
with the Handle type return value of an external API.
-