How to Pass User-Defined Structure Containing Strings to DLL
ID: Q107750
|
The information in this article applies to:
-
Microsoft Visual Basic Professional Edition for Windows, version 3.0
SUMMARY
This articles shows by example how to pass a user-defined structure that
contains strings to a DLL. The example enables a DLL to read and write the
strings in a user-defined structure.
MORE INFORMATION
The following step-by-step example passes a user-defined structure that
contains strings to a DLL to manipulate.
- Start a new project in Visual Basic.
- From the File menu, choose New Module (ALT F M). MODULE1.BAS will be
created by default. Add the following code to the .BAS module:
' Fixed-length string elements of a structure are packed in memory
' as are other values in Visual Basic. The following structure takes up
' 16 bytes of memory:
'
Type MYSTRINGSTRUCT
str1 As String * 8
str2 As String * 8
End Type
' Enter the following Declare statement as one, single line
Declare Sub MyStructProc Lib "Name of DLL your create"
(lpStringStruct As MYSTRINGSTRUCT)
- Add a command button (Command1) to Form1.
- Add the following code to the Command1_Click event of Form1:
Sub Command1_Click ()
Dim StringStruct As MYSTRINGSTRUCT
StringStruct.str1 = "str1"
StringStruct.str2 = "str2"
MyStructProc StringStruct
TEXT1.Text = StringStruct.str1
TEXT2.Text = StringStruct.str2
End Sub
- Add two text controls (Text1 and Text2) to Form1.
- Create the C code needed to make the DLL. In the .h file of the DLL a
user-defined type will create a mirror image of the type you defined in
the Visual Basic .BAS file. Char str[8] is equivalent to Visual Basic
declaration of str1 as String * 8. This structure definition takes up 16
bytes in memory as does the Visual Basic structure definition.
typedef struct STRINGSTRUCT{
char str1[8] ;
char str2[8] ;
} FAR * LPSTRINGSTRUCT ;
/* Declaration of the function */
void FAR PASCAL MyStructProc(LPSTRINGSTRUCT) ;
- Add the following code to your .c file:
#include "The .h file where you added the code above"
void FAR PASCAL MyStructProc(LPSTRINGSTRUCT lpStringStruct)
{
/* You need to use lstrcpyn because the structure from Visual
Basic is packed, and the strings are not Null terminated. The way
structures are passed from Visual Basic to a DLL is fully described
beginning on page 566 in the Visual Basic version 3.0 for Windows
"Programmers Guide," Chapter 24, "Calling Procedures in DLLs," in
"User-Defined Types" under "Calling DLL Procedures with Specific Data
Types." */
lstrcpyn(lpStringStruct->str1, "change11", 8) ;
lstrcpyn(lpStringStruct->str2, "change22", 8) ;
}
Additional query words:
3.00
Keywords :
Version :
Platform :
Issue type :
|