Microsoft KB Archive/48205

From BetaArchive Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Knowledge Base


Article ID: 48205

Article Last Modified on 8/16/2005



APPLIES TO

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



This article was previously published under Q48205

SUMMARY

The two programs below demonstrate how a Microsoft Basic function can return a string to C.

For Basic PDS 7.00 and 7.10, this example applies to near strings only. If you are using far strings (/Fs during compile or in the QBX.EXE environment), you must use the string-manipulation routines supplied with Basic PDS 7.00 and 7.10 (StringAssign, StringRelease, StringAddress, and StringLength). For more information about using far strings, see Chapter 13 of the "Microsoft Basic 7.0: Programmer's Guide" for versions 7.00 and 7.10.

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, search in the Microsoft Knowledge Base using the following word:

BAS2C


Code Example

The following Basic program is BSTRF.BAS, which contains a function that returns a string to a calling C routine:

   DECLARE SUB CSUB CDECL ()
   CALL CSUB
   END

   FUNCTION basvarfunc$(dummy%)
      basvarfunc$ = "This is the string"
   END FUNCTION
                

The following program is CSTRF.C, which calls a Basic routine that returns a string. A string descriptor is created to receive the data returned by the Basic function.

#include <stdio.h>
struct stringdesc
       {
        int length;       /* string length */ 
        char *string;     /* string address */ 
       };
extern struct stringdesc * pascal basvarfunc(int *dummy);
struct stringdesc *std;
void csub()
{
   int i;

   std = basvarfunc(0);

   printf("Length of string: %2d\r\n", std->length);

   for(i = 0; i < std->length; i++)
      printf("%c", std->string[i]);

   printf("\r\n");

}
                

To demonstrate these programs from an .EXE program, compile and link as follows:

BC BSTRF.BAS;
CL /c /AM CSTRF.C;
LINK /NOE BSTRF CSTRF;


BSTRF.EXE produces the following output:

Length of String: 18
This is the string


Additional query words: QuickBas BasicCom

Keywords: KB48205