bufferAddress
bufferAddress(): Integer;
The bufferAddress method of the Binary primitive type returns an integer containing the value of the pointer to the internal buffer that contains the binary. This value may be required when a JADE Binary primitive type value is being mapped to a structured record type for a call to an external function.
Call the bufferAddress method to determine the address of the buffer when an external function requires a data structure to contain a pointer to a second structure.
Do not use this method to pass the address of a binary to an external function that will be executed by a presentation client. If an external function is called from an application server method and executed by a different process (the presentation client), the memory address is not valid and will almost certainly result in a jade.exe (thin client) fault in the called function.
The method in the following example shows the use of the bufferAddress method to initialize the Windows SECURITY_DESCRIPTOR and SECURITY_ATTRIBUTES structures.
constants // Current security descriptor revision value SECURITY_DESCRIPTOR_REVISION = 1; vars result : Boolean; securityDescriptor : Binary[20]; securityAttributes : Binary[9]; begin ... // Call the Windows API to initialize the security descriptor result := call initializeSecurityDescriptor(securityDescriptor, SECURITY_DESCRIPTOR_REVISION); // Return Windows error if unable to initialize security descriptor if not result then return call getLastError; endif; // The first field (DWORD) in the security attributes structure is the // size (in bytes) of the structure securityAttributes[1:4] := securityAttributes.length.Binary; // The second field (LPVOID) points to the security descriptor // Set the value to the actual address of the buffer securityAttributes[5:4] := securityDescriptor.bufferAddress.Binary; ... end;