###Function### DllStructCreate ###Description### Erzeugt eine Struktur im C/C++-Stil die mit DllCall genutzt werden kann. ###Syntax### DllStructCreate ( Struct [,Pointer] ) ###Parameters### @@ParamTable@@ 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. @@End@@ ###ReturnValue### @@ReturnTable@@ Success: Eine Variable für den Gebrauch in DllStruct-Aufrufen. Failure: 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. @@End@@
@@ParamTable@@ 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) STRUCT Die folgenden Datentypen werden in Übereinstimmung mit den Regeln der C Deklaration ausgerichtet. Siehe unten. ENDSTRUCT Ende der Datentypen-Zusammenstellung. Einbettung ist möglich, siehe unten. ALIGN n bytes Grenze, an der der Datentyp ausgerichtet werden muss. @@End@@ ###Remarks### Jeder Datentyp muss mit einem Semikolon getrennt werden ';'. Array's werden durch hinzufügen von '[size]' nach dem Datentyp erzeugt: DllStructCreate("int;char[128]"). Ein Elementname kann ähnlich der C Deklaration hinzugefügt werden (DllStructCreate("int n;char buffer[128]")). Dieser Elementname kann anstelle eines Elements in anderen DllStruct... Funktionen genutzt werden. Er muss alphanumerisch und/oder mit einem Unterstrich sein (a-z,1-9,_). Wird eine Zusammenstellung von Datentypen definiert wie in "struct{}" in C Deklaration, muss "STRUCT; ...; ENDSTRUCT;" angewendet werden. Dies ist notwendig, um die Ausrichtung innerhalb der gesamten Struktur zu berücksichtigen. Dies ist nicht erforderlich, wenn alle Datentypen in der definierten Struktur, als eine implizite Struktur Ausrichtung angelegt wurden. DllStructCreate("int;STRUCT;ptr;int;ENDSTRUCT;int") ; Struktur ist 32 byte unter einem Windows 64-Bit und 16 unter einem Windows 32-Bit DllStructCreate("int;ptr;int;int") ; Struktur ist 24 byte unter einem Windows 64-Bit und 16 unter einem Windows 32-Bit Für eine andere Ausrichtung der Struktur kann man "align" als Prefix benutzen. Standardwert für n ist 8. Erlaubte Werte sind 1, 2, 4, 8 und 16. Die Ausrichtung eines Elements wird entweder an der Grenze eines Vielfachen von n oder an der eines Vielfachen der Größe eines Elements sein, je nach dem welches kleiner ist. Dies ist wie bei der "#pragma pack option" mit dem Microsoft Visual C++ Compiler. DllStructCreate("short;int") ; Die Struktur is 8 Bytes groß, der "int" beginnt ab Offset 4 DllStructCreate("align 2;short;int") ; Die Struktur is 6 Bytes groß, der "int" beginnt ab Offset 2 DllStructCreate("byte;double") ; Die Struktur is 16 Bytes groß, der "double" beginnt ab Offset 8 DllStructCreate("align 4;byte;double") ; Die Struktur is 12 Bytes groß, der "double" beginnt ab Offset 4 Wenn eine Änderung der Ausrichtung benötigt wird, kann "align" vor dem ersten Element, welches geändert werden werden soll, stehen. "align" oder "align 8" führt zur Standardausrichtung. Um belegten Speicher wieder freizugeben, braucht man lediglich die zurückgegebene Variable auf 0 setzen. Die Gesamtheit der anzuwendenden Ausrichtungsregeln: Die Ausrichtung eines Arrays ist die gleiche wie die Ausrichtung eines der Elemente des Arrays. Die Ausrichtung am Beginn einer Struktur ist die maximale Ausrichtung jedes einzelnen Mitglieds der Struktur. Jedes Element in der Struktur ist anzuordnen gemäß der richtigen Ausrichtung, wie in der obigen Tabelle definiert, welche eine implizite Einbettung erfordert, in Abhängigkeit zum vorhergehenden Element. Die Strukturgröße ist ein ganzzahliges Vielfaches ihrer Ausrichtung, was ein Auffüllen nach dem letzten Element erfordert. ###Related### DllCall, DllStructGetData, DllStructSetData, DllStructGetPtr, DllStructGetSize, IsDllStruct ###Example### @@IncludeExample@@