Funktionreferenz


DllStructSetData

Beschreibung anzeigen in

Setzt Daten in einem Element der Struktur.

DllStructSetData ( Struct, Element, value [, index] )

Parameter

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.

Rückgabewert

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.

Bemerkungen

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).

Verwandte Funktionen

DllStructCreate, DllStructGetData, DllStructGetSize

Beispiel

#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