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