Functions > Process >


DllStructSetData

Définit la donnée d'un élément d'une structure.

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

Paramètres

Struct La structure retournée par DllStructCreate().
Element L'index, de base 1, de l'élément de la structure auquel vous souhaitez accéder, ou le nom de l'élément tel qu'il est défini dans DllStructCreate().
value La nouvelle valeur à placer dans la structure.
index [optionnel] Pour les éléments qui sont dans un tableau, ce paramètre spécifie l'index de base 1 à définir. S'il est omis ou si le mot-clé Default est utilisé, alors autant de valeurs que possible seront définies dans l'élément, à partir de l'index 1 (Utile pour définir rapidement des chaînes). Ne pas utiliser pour des éléments qui ne sont pas dans un tableau.

Valeur de retour

Succès: Retourne la valeur qui est relue dans la structure.
Échec: Retourne 0.
@error: 1 = La structure n'est pas une structure correcte, retournée par DllStructCreate().
2 = L'élément est hors limites ou inconnu.
3 = L'index est limites.
4 = Le type de donnée de l'élément est inconnu.
5 = index <= 0.

Remarque

Lorsque l'élément est char[n], wchar[n] ou byte[n], la donnée peut être une chaîne. byte[n] accepte aussi les données binaires. Sinon la donnée doit avoir un type AutoIt compatible avec le type de l'élément, ou un nombre qui sera converti dans le type requis.
Les chaînes natives AutoIt sont implicitement converties en ANSI pour être copiées dans un élément char[n] ou byte[n]. Vous aurez besoin de convertir une chaîne native Unicode en UTF8 quand l'élément attend cet encodage (par exemple avec DllCall).

En relation

DllStructCreate, DllStructGetData, DllStructGetSize

Exemple

#include <MsgBoxConstants.au3>

Example()

Func Example()
    #cs Commentaires:
    Crée la structure suivante (langage C):
    struct {
        int var1;
        unsigned char var2;
        unsigned int var3;
        char var4[128];
    };

    Schéma:
    ------------------------------------
    \ int    \ byte   \ uint   \ char   \
     \   var1 \   var2 \   var3 \   var4 \
      ------------------------------------
    #ce

    ; Assigne une constante locale avec la définition d'une structure (lire attentivement les remarques DllStructCreate).
    Local Const $tagSTRUCT1 = "struct;int var1;byte var2;uint var3;char var4[128];endstruct"

    ; Note: La variable $tag est déclarée comme Const parce que sa valeur ne changera pas pendant toute l'exécution du script.

    ; Assigne une variable locale avec la structure.
    Local $tSTRUCT1 = DllStructCreate($tagSTRUCT1)

    ; Si une erreur s'est produite, affiche le code d'erreur et retourne False.
    If @error Then
        MsgBox($MB_SYSTEMMODAL, "", "Erreur dans DllStructCreate, Code: " & @error)
        Return False
    EndIf

    ; Définit les données de l'élément var1 (int) dans $tSTRUCT1.
    DllStructSetData($tSTRUCT1, "var1", -1)  ; Ou 1 à la place de "var1".

    ; Définit les données de l'élément var2 (octet) dans $tSTRUCT1.
    DllStructSetData($tSTRUCT1, 2, 255)  ; Ou "var2" au lieu de 2.

    ; Définit les données de l'élément var3 (uint) dans $tSTRUCT1.
    DllStructSetData($tSTRUCT1, "var3", -1)  ; Le -1 (Int signé) sera converti en un int non signé.
     ; Ou 3 au lieu de "var3".

    ; Définit les données de l'élément var4 (char) dans la $tSTRUCT1.
    DllStructSetData($tSTRUCT1, "var4", "Hello")  ; Ou 4 au lieu de "var4".

    ; Remarque: Cet élément peut contenir jusqu'à 128 caractères.

    ; Modifie les données de l'élément var4 (char) dans $tSTRUCT1, à l'index 1 du tableau de caractères (de base 1).
    DllStructSetData($tSTRUCT1, "var4", Asc("h"), 1)

    ; Affiche les résultats.
    MsgBox($MB_SYSTEMMODAL, "", "Struct Size: " & DllStructGetSize($tSTRUCT1) & @CRLF & _
            "Struct pointer: " & DllStructGetPtr($tSTRUCT1) & @CRLF & _
            "Data:" & @CRLF & _
            DllStructGetData($tSTRUCT1, 1) & @CRLF & _  ; Ou "var1" à la place de 1.
            DllStructGetData($tSTRUCT1, "var2") & @CRLF & _  ; Ou 2 à la place de "var2".
            DllStructGetData($tSTRUCT1, 3) & @CRLF & _  ; Ou "var3" à la place de 3.
            DllStructGetData($tSTRUCT1, 4))  ; Ou "var4" à la place de 4.

    ; Libére les ressources utilisées par la structure.
    $tSTRUCT1 = 0
EndFunc   ;==>Example