Setzt Daten in einem Element der Struktur.
DllStructSetData ( Struct, Element, value [, index] )
Struct | Struktur, zurückgegeben von DllStructCreate(). |
Element | Das Element in der Struktur, auf das man zugreifen möchte (beginnend bei 1) oder der Elementname, wie er mit DllStructCreate() festgelegt wurde. |
value | Der neue Wert, der in das Struktur-Element geschrieben werden soll. |
index | [optional] Befinden sich die Elemente in einem Array, so legt dies den 1-basierenden Index des zu erneuernenden Arrays fest. Falls dies nicht angegeben wird oder das Schlüsselwort Default verwendet wird, so wird bei Index 1 angefangen (nützlich für String die schnell erneuert werden sollten). Nicht für nicht-Array Elemente. |
Erfolg: | Der gesetzte Wert, der aus der Struktur zurückgelesen wird. |
Fehler: | 0. |
@Error: | 1 = Struct ist keine gültige Struktur wie von DllStructCreate() zurückgegeben. 2 = Element nicht im zulässigen Bereich oder unbekannt. 3 = Index nicht im zulässigen Bereich 4 = Element Datentyp unbekannt 5 = Index <= 0. |
Wenn das Element ein char[n], wchar[n] oder byte[n] ist, kann der Datentyp ein String sein. byte[n] akzeptiert auch Beinärdaten.
Sonst haben die Daten entweder einen AutoIt kompatiblen Typ mit dem Elementtyp oder eine Zahl welche in den benötigten Typ konveriert wird.
Native AutoIt-Strings werden implizit in ANSI vor der Kopie in ein char[n] oder byte[n] Element konvertiert.
Man muss native Unicode-Strings in UTF8 konvertieren, wenn das Element diese Codierung erwartet (z. B. in DllCall).
DllStructCreate, DllStructGetData, DllStructGetSize
#include <MsgBoxConstants.au3>
;=========================================================
; 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($MB_SYSTEMMODAL, "", "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($MB_SYSTEMMODAL, "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