Creates a C/C++ style structure to be used in DllCall.
DllStructCreate ( Struct [,Pointer] )
| Struct | A string representing the structure to create (See Remarks). |
| Pointer | [optional] If supplied the struct will not allocate memory but use the pointer supplied. |
| Success: | A variable for use with DllStruct calls. |
| Failure: | 0. |
| @Error: | 0 = No Error. |
| 1 = Variable passed to DllStructCreate was not a string. | |
| 2 = There is an unknown Data Type in the string passed. | |
| 3 = Failed to allocate the memory needed for the struct, or Pointer = 0. | |
| 4 = Error allocating memory for the passed string. |
| Type | Details |
| BYTE | 8bit(1byte) unsigned char |
| BOOLEAN | 8bit(1byte) unsigned char |
| CHAR | 8bit(1byte) ASCII char |
| WCHAR | 16bit(2byte) UNICODE wide char |
| short | 16bit(2bytes) signed integer |
| USHORT | 16bit(2bytes) unsigned integer |
| WORD | 16bit(2bytes) unsigned integer |
| int | 32bit(4bytes) signed integer |
| long | 32bit(4bytes) signed integer |
| BOOL | 32bit(4bytes) signed integer |
| UINT | 32bit(4bytes) unsigned integer |
| ULONG | 32bit(4bytes) unsigned integer |
| DWORD | 32bit(4bytes) unsigned integer |
| INT64 | 64bit(8bytes) signed integer |
| UINT64 | 64bit(8bytes) unsigned integer |
| ptr | 32 or 64bit unsigned integer (depending on if the x86 or x64 version of AutoIt is used) |
| HWND | 32bit(4bytes) integer |
| HANDLE | 32bit(4bytes) integer |
| float | 32bit(4bytes) floating point |
| double | 64bit(8bytes) floating point |
| INT_PTR, LONG_PTR, LRESULT, LPARAM | 32 or 64bit signed integer (depending on if the x86 or x64 version of AutoIt is used) |
| UINT_PTR, ULONG_PTR, DWORD_PTR, WPARAM | 32 or 64bit unsigned integer (depending on if the x86 or x64 version of AutoIt is used) |
| STRUCT | The following datatypes will be align according to C declaration rules. See below. |
| ENDSTRUCT | end of the collection datatypes. Padding can occurs see below. |
| ALIGN | n bytes boundary where datatype must be aligned. |
;=========================================================
; Create the struct
; struct {
; int var1;
; unsigned char var2;
; unsigned int var3;
; char var4[128];
; }
;=========================================================
Local $str = "int var1;byte var2;uint var3;char var4[128]"
Local $a = DllStructCreate($str)
If @error Then
MsgBox(0, "", "Error in DllStructCreate " & @error);
Exit
EndIf
;=========================================================
; Set data in the struct
; struct.var1 = -1;
; struct.var2 = 255;
; struct.var3 = INT_MAX; -1 will be typecasted to (unsigned int)
; strcpy(struct.var4,"Hello");
; struct.var4[0] = 'h';
;=========================================================
DllStructSetData($a, "var1", -1)
DllStructSetData($a, "var2", 255)
DllStructSetData($a, "var3", -1)
DllStructSetData($a, "var4", "Hello")
DllStructSetData($a, "var4", Asc("h"), 1)
;=========================================================
; Display info in the struct
;=========================================================
MsgBox(0, "DllStruct", "Struct Size: " & DllStructGetSize($a) & @CRLF & _
"Struct pointer: " & DllStructGetPtr($a) & @CRLF & _
"Data:" & @CRLF & _
DllStructGetData($a, 1) & @CRLF & _
DllStructGetData($a, 2) & @CRLF & _
DllStructGetData($a, 3) & @CRLF & _
DllStructGetData($a, 4))
;=========================================================
; Free the memory allocated for the struct if needed
;=========================================================
$a = 0