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