Erzeugt eine Struktur im C/C++-Stil die mit DllCall genutzt werden kann.
DllStructCreate ( Struct [,Pointer] )
| Struct | Ein String, der die zu erzeugende Struktur repräsentiert (Siehe Bemerkung). |
| Pointer | [optional] Falls bereitgestellt, belegt die Struktur keinen neuen Speicher, sondern nutzt den Speicher, auf dessen Adresse der übergebene Zeiger verweist. |
| Erfolg: | Eine Variable für den Gebrauch in DllStruct-Aufrufen. |
| Fehler: | 0. |
| @Error: | 0 = Kein Fehler. |
| 1 = Übergebene Variable an DllStructCreate war kein String. | |
| 2 = Unbekannter Datentyp in der übergebenen Variable. | |
| 3 = Belegung des benötigten Speichers für die Struktur fehlgeschlagen, oder Pointer = 0. | |
| 4 = Fehler bei der Belegung des Speichers für den übergebenen String. | |
| Typ | 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 (Je nach dem, ob die x86 oder die x64 Version von AutoIt benutzt wird) |
| 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 (Je nach dem, ob die x86 oder die x64 Version von AutoIt benutzt wird) |
| UINT_PTR, ULONG_PTR, DWORD_PTR, WPARAM | 32 or 64bit unsigned integer (Je nach dem, ob die x86 oder die x64 Version von AutoIt benutzt wird) |
;=========================================================
; Erzeugen der Struktur
; struct {
; int var1;
; unsigned char var2;
; unsigned int var3;
; char var4[128];
; }
;=========================================================
Local $str = "int var1;ubyte var2;uint var3;char var4[128]"
Local $a = DllStructCreate($str)
If @error Then
MsgBox(0, "", "Fehler in DllStructCreate " & @error);
Exit
EndIf
;=========================================================
; Daten in Struktur setzen
; struct.var1 = -1;
; struct.var2 = 255;
; struct.var3 = INT_MAX; -1 wird per typecast zu (unsigned int)
; strcpy(struct.var4,"Hallo");
; struct.var4[0] = 'h';
;=========================================================
DllStructSetData($a, "var1", -1)
DllStructSetData($a, "var2", 255)
DllStructSetData($a, "var3", -1)
DllStructSetData($a, "var4", "Hallo")
DllStructSetData($a, "var4", Asc("h"), 1)
;=========================================================
; Struktur-Info anzeigen
;=========================================================
MsgBox(0, "DllStruct", "Strukturgröße: " & DllStructGetSize($a) & @CRLF & _
"Strukturzeiger: " & DllStructGetPtr($a) & @CRLF & _
"Daten:" & @CRLF & _
DllStructGetData($a, 1) & @CRLF & _
DllStructGetData($a, 2) & @CRLF & _
DllStructGetData($a, 3) & @CRLF & _
DllStructGetData($a, 4))
;=========================================================
; Den Speicher freigeben den die Struktur belegt hat
;=========================================================
$a = 0