Sybase 12.4.2 Manuale Utente

Pagina di 536
Calling external libraries from procedures
272
 
Special considerations when passing character types
For the character data type (CHAR), Adaptive Server IQ allocates a 255-byte 
buffer (including one for the null terminator) for each parameter. If the 
parameter is an INOUT parameter, the existing value is copied into the buffer 
and null terminated, and a pointer to this buffer is passed to the external 
function. The external function should therefore not allocate a buffer of its own 
for OUT or INOUT character parameters: the server has already allocated the 
space. If the external function writes beyond the 256 bytes (including the 
ending null character), it is writing over data structures in the server. 
When the entry point returns, the parameter buffers are translated back into 
their server data structure string equivalents based on the 
strlen()
 value of the 
buffer.
The external function should be sure to null-terminate any output string 
parameters. OUT parameters follow the same procedure except that as there is 
no initial data, no initial value of the output buffer parameter is guaranteed. 
Always be sure to put a null byte into an OUT char parameter, as the lack of 
one could cause problems if the out buffer happens to be allocated adjacent to 
an area that is not in the allocate address space of the server.