Example of Passing Fixed-Length Strings from C to Basic (47348)



The information in this article applies to:

  • Microsoft QuickBASIC 4.0
  • Microsoft QuickBASIC 4.0b
  • Microsoft QuickBASIC 4.5
  • Microsoft BASIC Compiler for MS-DOS and OS/2 6.0
  • Microsoft BASIC Compiler for MS-DOS and OS/2 6.0b
  • Microsoft Basic Professional Development System (PDS) for MS-DOS and MS OS/2 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 = "This is a test" + CHR$(0)
CALL StringFar(VARPTR(array), VARSEG(array), LEN(array))
LOCATE 20,20
PRINT array
END
				

C Program

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

    /* 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;
       }
 }
				

Modification Type:MinorLast Reviewed:1/8/2003
Keywords:KB47348