Important Notice
The pages on this site contain documentation for very old MS-DOS software,
purely for historical purposes.
If you're looking for up-to-date documentation, particularly for programming,
you should not rely on the information found here, as it will be woefully
out of date.
VARPTR and VARSEG Functions Example
◄Example► ◄Contents► ◄Index► ◄Back►
──────────────────────────────────────────────────────────────────────────────
' This example uses the VARPTR and VARSEG functions in a CALL statement
' to pass a Basic array to a C function.
' Note: To run this example, you must separately compile the C function
' with the large-model (/AL) switch and either place the object module in
' a Quick library or link it to the Basic program.
' To try this example:
' 1. Choose New Project from the File menu
' 2. Copy the code example below to the code window
' 3. Press F5 to run the example
DEFINT A-Z
DECLARE SUB AddArr CDECL (BYVAL Offs, BYVAL Segm, BYVAL Num)
DIM A(1 TO 100) AS INTEGER
CLS ' Clear the screen
FOR I = 1 TO 15 ' Fill the array with the numbers 1 to 15
A(I) = I
NEXT I
' Call the C function. AddArr expects a far address (segment and offset).
' Because CDECL puts things on the stack from right to left, place the
' offset VARPTR(A(1)) first in the list, followed by the segment
' VARSEG(A(1)).
CALL AddArr(VARPTR(A(1)), VARSEG(A(1)), 15)
FOR I = 1 TO 15 ' Print the modified array
PRINT A(I)
NEXT I
END
' /* C Function AddArr */
' /* Add one to the first num elements of array arr.*/
' void far addarr(arr,num)
' int far *arr;
' int num;
' {
' int i;
' for(i=0;i<num;i++) arr[i]++;
' }