Microsoft KB Archive/47348

= Example of Passing Fixed-Length Strings from C to Basic =

Article ID: 47348

Article Last Modified on 11/21/2006

-

APPLIES TO


 * Microsoft QuickBasic 4.0
 * Microsoft QuickBASIC 4.0b
 * Microsoft QuickBasic 4.5 for MS-DOS
 * Microsoft BASIC Compiler 6.0
 * Microsoft BASIC Compiler 6.0b
 * Microsoft BASIC Professional Development System 7.0

-



This article was previously published under Q47348



SUMMARY
To pass a string from Microsoft C to compiled Basic, the string must originate in Basic. A fixed-length string works best for this purpose. In the C module, you can modify the string, and Basic will recognize this modification because Basic is referencing the address of the string.

This information about interlanguage calling applies to QuickBasic Versions 4.00, 4.00b, and 4.50 for MS-DOS, to Microsoft Basic Compiler Versions 6.00 and 6.00b for MS-DOS and MS OS/2, and to Microsoft Basic PDS Version 7.00 for MS-DOS and MS OS/2.



MORE INFORMATION
For more information about passing other types of parameters between Basic and C, and a list of which Basic and C versions are compatible with each other, query in the Microsoft Knowledge Base using the following word:

BAS2C

Code Example
The following program is an example of passing a fixed-length string from C to Basic (where the string is first allocated in Basic). Please note that the C module needs to use the medium memory model.

Compile Steps
BC callc.bas /o;

cl /c /AM stringf.c

Link Step
LINK callc+stringf /nod /noe ,,,bcom45+mlibce;

For Basic PDS 7.00, use the following link step:

LINK callc+stringf /nod /noe ,,,bcl70enr.lib+mlibce.lib;

Basic Program
'CALLC.BAS DECLARE SUB StringFar CDECL (_           BYVAL p1o AS INTEGER,_            BYVAL p1s AS INTEGER,_            SEG p3 AS INTEGER) CLS DIM array AS STRING * 15 array = &quot;This is a test&quot; + CHR$(0) CALL StringFar(VARPTR(array), VARSEG(array), LEN(array)) LOCATE 20,20 PRINT array END

C Program
/* stringf.c */ void StringFar(a,len) char far *a; int *len; {   int i;    printf(&quot;The string is : %s \n\n&quot;,a); printf(&quot; Index      Value       Character\n&quot;); for (i=0;i < *len; i++) {        printf(&quot;  %2d       %3d      %c\n&quot;,i,a[i],a[i]); };
 * 1) include 

/* This loop shows that the string can be modified. It fills the string with the '@' character. */    for (i=10;i < *len; i++) {        a[i]=64; } }

Additional query words: QuickBas BasicCom

Keywords: KB47348

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.