Functions > Process >


DllStructGetData

Obtient la valeur d'un élément de la structure.

DllStructGetData ( Struct, Element [, index = Default] )

Paramètres

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

Valeur de retour

Succès: Retourne les données dans l'élément de la structure.
Échec: Retourne 0.
@error: 1 = La structure n'est pas une structure correcte retournée par DllStructCreate().
2 = Valeur de l'élément en dehors des limites ou inconnu.
3 = L'index est hors des limites.
4 = Type d'élément de donnée inconnu
5 = index <= 0.

Remarque

Lorsque l'élément est char ou char[n], wchar ou wchar[n] la valeur retournée est toujours une chaîne.
Lorsque l'élément est byte[n] et l'index est omis la valeur retournée est de type binaire.
Sinon, la fonction retourne toujours le meilleur type de donnée AutoIt correspondant au type de l'élément individuel (par exemples, 'byte' retourne 'Int32', 'float' retourne 'Double').

En relation

DllStructCreate, DllStructSetData

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