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