Example of Passing User-Defined Type from MASM to Basic (49394)



The information in this article applies to:

  • Microsoft QuickBASIC 4.0, when used with:
    • the operating system: MS-DOS
  • Microsoft QuickBASIC 4.0b, when used with:
    • the operating system: MS-DOS
  • Microsoft QuickBASIC 4.5, when used with:
    • the operating system: MS-DOS
  • 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 Q49394

SUMMARY

The two programs below demonstrate how Microsoft assembly language can pass a user-defined type to Basic.

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 Professional Development System (PDS) versions 7.00 and 7.10 for MS-DOS and MS OS/2.

MORE INFORMATION

For more information about passing other types of parameters between Basic and MASM, search in the Microsoft Knowledge Base using the following word:

BAS2MASM

Code Example

The following Basic program is BUTYPE.BAS, which receives a user-defined type from an assembly language program and prints it out:
DEFINT A-Z
DECLARE SUB MasmSub
TYPE mixed
   i AS INTEGER
   l AS LONG
   s AS SINGLE
   d AS DOUBLE
   fx AS STRING * 19
END TYPE
DIM dummy AS mixed
CLS
PRINT "Calling assembly routine which will fill the";
PRINT " user-defined type."
CALL MasmSub
END

SUB BasicSub (dummy AS mixed)
   PRINT "Values in user-defined type:"
   PRINT
   PRINT "Integer: ", dummy.i
   PRINT "Long: ", dummy.l
   PRINT "Single: ", dummy.s
   PRINT "Double: ", dummy.d
   PRINT "fixed-length String: ", dummy.f
END SUB

The following program is AUTYPE.ASM, which builds a user-defined type
and passes it to Basic:

.MODEL MEDIUM
          usrdefType   STRUC
                       iAsm       DW 10
                       lAsm       DD 43210
                       sAsm       DD 32.10
                       dAsm       DQ 12345.67
                       fxAsm      DB 'Fixed-length string'
          usrdefType   ENDS
EXTRN BasicSub:PROC
.DATA
          BasicRec usrdefType <>
.CODE

          PUBLIC MasmSub
MasmSub   PROC                     ; no stack frame is needed
                                   ;   because no arguments are
                                   ;   passed to assembly
          mov ax, OFFSET BasicRec  ; get address of structure
          push ax                  ; pass it as argument to Basic
          CALL BasicSUb
          ret
MasmSub   ENDP
          END
				
To demonstrate these programs from an .EXE program, compile and link as follows:
   BC BUTYPE.BAS;
   MASM AUTYPE.ASM;
   LINK BUTYPE AUTYPE;
				
BUTYPE.EXE produces the following output:
   Integer:   10
   Long:      43210
   Single:    32.10
   Double:    12345.67
   fixed-length String:  Fixed-length string
				

Modification Type:MinorLast Reviewed:1/9/2003
Keywords:KB49394