Erzeugt eine Struktur im C/C++-Stil die mit DllCall genutzt werden kann.
DllStructCreate ( "Struct" [,Pointer] )
Parameter
| 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. |
Rückgabewert
| 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) |
Bemerkungen
Jeder Datentyp muss mit einem Semikolon getrennt werden ';'. Array's werden durch hinzufügen von '[size]' nach dem Datentyp erzeugt: DllStructCreate("int;char[128]").
Verwandte Funktionen
DllCall, DllStructGetData, DllStructSetData, DllStructGetPtr, DllStructGetSize, IsDllStruct
Beispiel
;=========================================================
; Erzeugen der Struktur
; struct {
; int var1;
; unsigned char var2;
; unsigned int var3;
; char var4[128];
; }
;=========================================================
$str = "int var1;ubyte var2;uint var3;char var4[128]"
$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