Microsoft KB Archive/49393

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

Article ID: 49393

Article Last Modified on 11/21/2006



This article was previously published under Q49393



SUMMARY
The two programs shown below demonstrate how a Microsoft Basic program passes a user-defined type to assembly language by near 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 UNEAR.BAS, which passes a user-defined type to assembly language by near reference: DEFINT A-Z TYPE mixed i AS INTEGER l AS LONG s AS SINGLE d AS DOUBLE fx AS STRING * 19 END TYPE DECLARE SUB MasmSub (dummy AS mixed) DIM dummy AS mixed CLS PRINT &quot;Calling assembly routine to fill the user-defined type.&quot; CALL MasmSub(dummy) PRINT &quot;Values in user-defined type:&quot; PRINT &quot;Integer: &quot;, dummy.i  PRINT &quot;Long: &quot;, dummy.l   PRINT &quot;Single: &quot;, dummy.s   PRINT &quot;Double: &quot;, dummy.d   PRINT &quot;fixed-length String: &quot;, dummy.fx   END The following program is AUNEAR.ASM, which gets a Basic user-defined type by near 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 push bp         mov  bp,sp            ; set stack frame push es         push di          push si          push cx          push ds          pop  es

mov di,[bp+6]        ; get offset of user-defined type mov si,OFFSET AsmRec ; set up for copy mov cx,37            ; size of structure rep movsb            ; copy values to Basic variable

pop cx         pop si          pop di          pop es          pop bp          ret 2 MasmSub  ENDP END To demonstrate these programs from an .EXE program, compile and link as follows:

BC UNEAR.BAS;

MASM UANEAR.ASM;

LINK UNEAR UANEAR;

UNEAR.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: KB49393

-

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

© Microsoft Corporation. All rights reserved.