Function Reference


DllStructGetPtr

Show description in

Returns the pointer to the struct or an element in the struct.

DllStructGetPtr ( Struct [, Element] )

Parameters

Struct The struct returned by DllStructCreate().
Element [optional] The element of the struct whose pointer you need, starting at 1 or the element name as defined in DllStructCreate().

Return Value

Success: The pointer to the struct.
Failure: 0.
@error: 1 = Struct not a valid struct returned by DllStructCreate().
2 = Element out of range.

Remarks

Used in DllCall().

Related

DllCall, DllStructCreate

Example

Example 1

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

Example()

Func Example()
        ; Assign a Local variable the handle of the current active window.
        Local $hWnd = WinGetHandle("") ; Same as: "[active]".

        ; Assign a Local variable the window's rectangle (array).
        Local $aWndPos = WinGetPos($hWnd)

        ; Assign a Local variable the structure created with the tagRECT definition.
        Local $tRECT = DllStructCreate($tagRECT)
        Local $iError = 0

        ; If an error occurred display the error code and return False.
        If @error Then
                $iError = @error
                MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), Default, "Error in DllStructCreate, Code: " & $iError)
                Return False
        EndIf

        ; Make the DllCall of the GetWindowRect function.
        DllCall("user32.dll", "int", "GetWindowRect", _
                        "hwnd", $hWnd, _
                        "ptr", DllStructGetPtr($tRECT))

        ; If an error occurred display the error code and return False.
        If @error Then
                $iError = @error
                MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), Default, "Error in DllCall, Code: " & $iError)
                Return False
        EndIf

        ; Note: The 2nd parameter of the GetWindowRect function requires a pointer,
        ; the result returned by the DllStructCreate is NOT a pointer, but using 'struct*' allows to pass a structure as a ptr.

        ; Assign Local variables the returned rectangle.
        Local $iLeft = DllStructGetData($tRECT, "Left") ; Or 1 instead of "Left".
        Local $iTop = DllStructGetData($tRECT, 2) ; Or "Top" instead of 2.
        Local $iRight = DllStructGetData($tRECT, 3) ; Or "Right" instead of 3.
        Local $iBottom = DllStructGetData($tRECT, "Bottom") ; Or 4 instead of "Bottom".

        ; Release the resources used by the structure.
        $tRECT = 0

        ; Display the results of WinGetPos and the returned rectangle.
        MsgBox($MB_SYSTEMMODAL, "", "WinGetPos(): (" & $aWndPos[0] & ", " & $aWndPos[1] & ") " & _
                        "(" & $aWndPos[2] + $aWndPos[0] & ", " & $aWndPos[3] + $aWndPos[1] & ")" & @CRLF & _
                        "GetWindowRect(): (" & $iLeft & ", " & $iTop & ") (" & $iRight & ", " & $iBottom & ")")
EndFunc   ;==>Example

Example 2

#include <MsgBoxConstants.au3>

Example()

Func Example()
        ; Assign a Local variable a structure with the definition of an int.
        Local $tSTRUCT1 = DllStructCreate("int")
        Local $iError = 0

        ; If an error occurred display the error code and return False.
        If @error Then
                $iError = @error
                MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), Default, "Error in DllCall, Code: " & $iError)
                Return False
        EndIf

        ; Assign a Local variable the tSTRUCT1 structure except that the elements will be got according to the new definition.
        Local $tSTRUCT2 = DllStructCreate("uint", DllStructGetPtr($tSTRUCT1, 1))

        ; If an error occurred display the error code and return False.
        If @error Then
                $iError = @error
                MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), Default, "Error in DllCall, Code: " & $iError)
                Return False
        EndIf

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

        ; If an error occurred display the error code and return False.
        If @error Then
                $iError = @error
                MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), Default, "Error in DllCall, Code: " & $iError)
                Return False
        EndIf

        ; Notes: -The structures points to the same structure (they have the same pointer);
        ; The first element got with the:
        ; *tSTRUCT1 struct will be an int.
        ; *tSTRUCT2 struct will be an unsigned int (the element is casted from int to uint).
        ; *tSTRUCT3 struct will be a float (the element is casted from int to float).
        ;
        ; -The "reinterpret_cast" casting operator is used.

        ; Set the data of the first element (int) in the $tSTRUCT1.
        DllStructSetData($tSTRUCT1, 1, -1)

        ; Display the different data types of the same data.
        MsgBox($MB_SYSTEMMODAL, "", _
                        "int: " & DllStructGetData($tSTRUCT1, 1) & @CRLF & _
                        "uint: " & DllStructGetData($tSTRUCT2, 1) & @CRLF & _
                        "float: " & DllStructGetData($tSTRUCT3, 1))

        ; Release the resources used by the structures.
        $tSTRUCT1 = 0
        $tSTRUCT2 = 0
        $tSTRUCT3 = 0
EndFunc   ;==>Example