How to Pass One-Byte Parameters from VB to DLL Routines

ID Number: Q71106

1.00

WINDOWS

Summary:

Calling some routines in dynamic link libraries (DLLs) requires BYTE

parameters in the argument list. Visual Basic possesses no BYTE data

type as defined in other languages such as C, which can create DLLs.

To pass a BYTE value correctly to an external FUNCTION (in a DLL),

which requires a BYTE data type, you must pass an integer data type

for the BYTE parameter.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

Visual BASIC has the ability to call external code in the form of

dynamic link libraries (DLLs). Some of these libraries require BYTE

parameters in the argument list. An example of this is located in the

KEYBOARD.DRV FUNCTION as defined below:

FUNCTION GetTempFileName (BYTE cDrive,

LPSTR lpPrefix,

WORD wUnique,

LPSTR lpTempFileName)

GetTempFileName is documented on page 4-217 of the "Microsoft Windows

3.0 Software Development Kit, Reference - Volume 1." In Visual BASIC,

declare the FUNCTION on one line in the main module of your code:

DECLARE FUNCTION GetTempFileName LIB "keyboard.drv"

(BYVAL A%, BYVAL B$, BYVAL C%, BYVAL D$)

Because the architecture of the 80x86 stack is segmented into word

boundaries, the smallest type pushed onto the stack will be a word.

Therefore, both the BYTE and the integer will be pushed onto the stack

in the same manner, and require the same amount of memory. This is the

reason you can use an integer data type for a BYTE data type in these

types of procedure calls.

References:

1. "Programming Windows: the Microsoft Guide to Writing Applications

for Windows 3," by Charles Petzold (published by Microsoft Press,

1990)

2. "Microsoft Windows 3.0 Software Development Kit: Reference

Volume 1"

3. The WINSDK.HLP file shipped with Microsoft Windows 3.0 Software

Development Kit.