Function Reference


DllStructGetPtr

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(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), 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(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), 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(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), 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(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), 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(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), 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