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.
Article Q27302
◄Contents► ◄Index► ◄Back►
─────────────────────────────────────────────────────────────────────────────
◄Knowledge Base Contents► ◄Knowledge Base Index►
Passing a Basic Array of User-Defined Type to C - Q27302
The following example demonstrates how to pass an array of
user-defined-type records from compiled Basic to Microsoft C.
This information applies to the Standard and Professional Editions of
Microsoft Visual Basic version 1.0 for MS-DOS and to Microsoft C
Compiler version 7.0.
To compile this example in Visual Basic for MS-DOS, execute the
following commands:
BC BMODULE.BAS;
CL -c -AM CMODULE.C
LINK BMODULE.OBJ CMODULE.OBJ;
Basic Program
-------------
TYPE record
a AS INTEGER
b AS STRING * 20
c AS SINGLE
END TYPE
DECLARE SUB TypeArray CDECL (_
BYVAL p1o AS INTEGER,_
BYVAL p1s AS INTEGER)
DIM element(10) AS record
CLS
FOR I = 0 TO 10
element(I).a = 128 + I
element(I).b = STR$(I) + ". " + DATE$ + CHR$(0)
element(I).c = 39.6 * I
NEXT I
CALL TypeArray(VARPTR(element(0)), VARSEG(element(0)))
END
C Routine
---------
#include <stdio.h>
struct record {
int a;
char b[20];
float c;
};
void TypeArray(struct record far *element) {
int i;
for (i=0; i<3; i++) {
printf("Record[%d].A = %d\", i, element->a);
printf("Record[%d].B = %Fs\", i, element->b);
printf("Record[%d].C = %f\", i, element->c);
printf("\");
element++;
}
}
Output
------
Record[0].A = 128
Record[0].B = 0. 02-02-1988
Record[0].C = 0.000000
Record[1].A = 129
Record[1].B = 1. 02-02-1988
Record[1].C = 39.599998
Record[2].A = 130
Record[2].B = 2. 02-02-1988
Record[2].C = 79.199997