Functions > Process >


DllStructGetPtr

Obtient le pointeur vers la structure ou un élément dans la structure.

DllStructGetPtr ( Struct [, Element] )

Paramètres

Struct La structure retournée par DllStructCreate().
Element [optionnel] L'élément de la structure qui est le pointeur dont vous avez besoin, à partir de 1, ou du nom de l'élément tel que défini dans DllStructCreate().

Valeur de retour

Succès: Retourne le pointeur vers 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.

Remarque

Utilisé dans DllCall().

En relation

DllCall, DllStructCreate

Exemples

Exemple 1

#include <MsgBoxConstants.au3>
#include <StructureConstants.au3>

Example()

Func Example()
    ; Assigne une variable locale avec le handle de la fenêtre active.
    Local $hWnd = WinGetHandle("") ;Même que : « [ actif ] ».

    ; Assigne une variable locale avec le rectangle de la fenêtre (tableau).
    Local $aWndPos = WinGetPos($hWnd)

    ; Assigne une variable locale avec la structure créée avec la définition de tagRECT.
    Local $tRECT = DllStructCreate($tagRECT)
    Local $iError = 0

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

    ; Fait DllCall avec la fonction GetWindowRect.
    DllCall("user32.dll", "int", "GetWindowRect", _
            "hwnd", $hWnd, _
            "ptr", DllStructGetPtr($tRECT))

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

    ; Remarque: le deuxième paramètre de la fonction GetWindowRect nécessite un pointeur,
    ; le résultat retourné par DllStructCreate n'est pas un pointeur, la fonction DllStructGetPtr doit être utilisé.

    ; Affecte des variables locales avec le rectangle retourné.
    Local $iLeft = DllStructGetData($tRECT, "Left") ; Ou 1 à la place de «Left».
    Local $iTop = DllStructGetData($tRECT, 2) ; Ou "Top" au lieu de 2.
    Local $iRight = DllStructGetData($tRECT, 3) ; Ou "Right" au lieu de 3.
    Local $iBottom = DllStructGetData($tRECT, "Bottom") ; Ou 4 au lieu de "Bottom".

    ; Libére les ressources utilisées par la structure.
    $tRECT = 0

    ; Affiche les résultats de WinGetPos et le rectangle retourné.
    MsgBox($MB_SYSTEMMODAL, "", "WinGetPos(): (" & $aWndPos[0] & ", " & $aWndPos[1] & ") " & _
            "(" & $aWndPos[2] + $aWndPos[0] & ", " & $aWndPos[3] + $aWndPos[1] & ")" & @CRLF & _
            "GetWindowRect(): (" & $iLeft & ", " & $iTop & ") (" & $iRight & ", " & $iBottom & ")")
EndFunc   ;==>Example


Exemple 2

#include <MsgBoxConstants.au3>

Example()

Func Example()
    ; Assigne une variable locale d'une structure à la définition d'un int.
    Local $tSTRUCT1 = DllStructCreate("int")
    Local $iError = 0

    ; Si une erreur s'est produite afficher le code d'erreur et revenir False.
    If @error Then
        $iError = @error
        MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), Default, "Erreur dans DllCall, Code: " & $iError)
        Return False
    EndIf

    ; Assigne une variable locale avec la structure tSTRUCT1 mais les éléments seront obtenus selon la nouvelle définition.
    Local $tSTRUCT2 = DllStructCreate("uint", DllStructGetPtr($tSTRUCT1, 1))

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

    Local $tSTRUCT3 = DllStructCreate("float", DllStructGetPtr($tSTRUCT1, 1))

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

    ; Notes: -Les structures pointent sur la même structure (elles ont le même pointeur);
    ; Le premier élément contient:
    ; *tSTRUCT1 structure qui sera un int.
    ; *tSTRUCT2 structure qui sera un unsigned int (l'élément est casté de int en uint).
    ; *tSTRUCT3 structure qui sera un float (l'élément est casté de int à float).
    ;
    ; -Une opération de cast "reinterpret_cast" est utilisée.

    ; Définit les données du premier élément (int) dans $tSTRUCT1.
    DllStructSetData($tSTRUCT1, 1, -1)

    ; Affiche les différents types de données des mêmes données.
    MsgBox($MB_SYSTEMMODAL, "", _
            "int: " & DllStructGetData($tSTRUCT1, 1) & @CRLF & _
            "uint: " & DllStructGetData($tSTRUCT2, 1) & @CRLF & _
            "float: " & DllStructGetData($tSTRUCT3, 1))

    ; Libére les ressources utilisées par les structures.
    $tSTRUCT1 = 0
    $tSTRUCT2 = 0
    $tSTRUCT3 = 0
EndFunc   ;==>Example