Obtient le pointeur vers la structure ou un élément dans la structure.
DllStructGetPtr ( Struct [, Element] )
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(). |
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. |
#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
#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