Article ID: 49392
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
- Microsoft BASIC Professional Development System 7.1
This article was previously published under Q49392
SUMMARY
The two programs shown below demonstrate how a Microsoft Basic program passes a user-defined type to assembly language by far reference.
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 UFAR.BAS, which passes a user-defined type to assembly language by far reference:
DEFINT A-Z DECLARE SUB MasmSub (BYVAL segment, BYVAL offset) 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 to fill the user-defined type." CALL MasmSub(VARSEG(dummy), VARPTR(dummy)) PRINT "Values in user-defined type:" PRINT "Integer: ", dummy.i PRINT "Long: ", dummy.l PRINT "Single: ", dummy.s PRINT "Double: ", dummy.d PRINT "fixed-length String: ", dummy.fx END
The following program is UAFAR.ASM, which gets a user-defined type by far reference and copies data into it:
.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 .DATA AsmRec usrdefType <> PUBLIC MasmSub MasmSub PROC FAR push bp mov bp,sp push es push di push si push cx mov es,[bp+8] ; get segment of user-defined type mov di,[bp+6] ; get offset of user-defined type mov si,OFFSET AsmRec mov cx,37 ; size of structure rep movsb ; copy values to Basic variable pop cx pop si pop di pop es pop bp ret 4 MasmSub ENDP END
To demonstrate these programs from an .EXE program, compile and link as follows:
BC /O UFAR.BAS;
MASM UAFAR.ASM;
LINK UFAR UAFAR;
UFAR.EXE produces the following output:
Integer: 10 Long: 43210 Single: 32.10 Double 12345.67 fixed-length String: Fixed-length string
Additional query words: QuickBas BasicCom
Keywords: KB49392