Funktionreferenz


DllStructGetPtr

Beschreibung anzeigen in

Gibt den Zeiger auf die Struktur oder ein Element in der Struktur zurück.

DllStructGetPtr ( Struct [, Element] )

Parameter

Struct Struktur, zurückgegeben von DllStructCreate().
Element [optional] Das Element der Struktur dessen Zeiger man braucht, beginnend bei 1 oder dem Elementnamen wie in DllStructCreate() festgelegt.

Rückgabewert

Erfolg: Der Zeiger auf die Struktur.
Fehler: 0.
@Error: 1 = Struct ist keine gültige Struktur wie von DllStructCreate() zurückgegeben.
2 = Element ist ausserhalb des Bereichs.

Bemerkungen

Verwendet in DllCall().

Verwandte Funktionen

DllCall, DllStructCreate

Beispiel

Beispiel 1

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

Example()

Func Example()
    ; Weist einer lokalen Variable das Handle zum momentanen aktiven Fenster zu.
    Local $hWnd = WinGetHandle("") ; Äquivalent zu: "[active]".

    ; Weist einer lokalen Variable das Rechteck des Fensters (Array) zu.
    Local $aWndPos = WinGetPos($hWnd)

    ; Weist einer lokalen Variable die Struktur zu welche mit tagRECT definiert ist.
    Local $tRECT = DllStructCreate($tagRECT)
    Local $iError = 0

    ; Wenn ein Fehler aufgetaucht ist, so wird dieser angezeigt und False zurückgegeben.
    If @error Then
        $iError = @error
        MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), Default, "Error in DllStructCreate, Code: " & $iError)
        Return False
    EndIf

    ; Ruft die GetWindowRect Funktion mittels DllCall auf.
    DllCall("user32.dll", "int", "GetWindowRect", _
            "hwnd", $hWnd, _
            "ptr", DllStructGetPtr($tRECT))

    ; Wenn ein Fehler aufgetaucht ist, so wird dieser angezeigt und False zurückgegeben.
    If @error Then
        $iError = @error
        MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), Default, "Error in DllCall, Code: " & $iError)
        Return False
    EndIf

    ; Hinweis: Der zweite Parameter der GetWindowRect Funktion benötigt einen Pointer.
    ; Der Rückgabewert durch DllStructCreate ist KEIN Pointer. Wird jedoch 'struct*' verwendet, so kann eine Struktur als ein Pointer übergeben werden.

    ; Weist lokalen Variablen die Werte des zurückgegebenen Rechtecks zurück.
    Local $iLeft = DllStructGetData($tRECT, "Left") ; Oder 1 statt "Left".
    Local $iTop = DllStructGetData($tRECT, 2) ;Oder "Top" statt 2.
    Local $iRight = DllStructGetData($tRECT, 3) ;Oder "Right" statt 3.
    Local $iBottom = DllStructGetData($tRECT, "Bottom") ;Oder 4 statt "Bottom".


    ; Gibt die Ressourcen, welche von der Struktur genutzt wurden, frei.
    $tRECT = 0

    ; Zeigt die Ergebnisse von WinGetPos und dem zurückgegeben Rechteck an.
    MsgBox($MB_SYSTEMMODAL, "", "WinGetPos(): (" & $aWndPos[0] & ", " & $aWndPos[1] & ") " & _
            "(" & $aWndPos[2] + $aWndPos[0] & ", " & $aWndPos[3] + $aWndPos[1] & ")" & @CRLF & _
            "GetWindowRect(): (" & $iLeft & ", " & $iTop & ") (" & $iRight & ", " & $iBottom & ")")
EndFunc   ;==>Example

Beispiel 2

#include <MsgBoxConstants.au3>

Example()

Func Example()
    Local $iError = 0

    ; Weist einer lokalen Variablen eine Struktur mit der Definition eines int zu.
    Local $tSTRUCT1 = DllStructCreate("int")

    ; Wenn ein Fehler aufgetreten ist, wird der Fehlercode angezeigt und False zurückgegeben.
    If @error Then
        $iError = @error
        MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), Default, "Fehler bei DllStructCreate, Code: " & $iError)
        Return False
    EndIf

    ; Weist der Struktur tSTRUCT1 eine lokale Variable zu, unter der Bedingung, dass die Elemente gemäß der neuen Definition abgerufen werden.
    Local $tSTRUCT2 = DllStructCreate("uint", DllStructGetPtr($tSTRUCT1, 1))

    ; Wenn ein Fehler aufgetreten ist, wird der Fehlercode angezeigt und False zurückgegeben.
    If @error Then
        $iError = @error
        MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), Default, "Fehler bei DllStructCreate, Code: " & $iError)
        Return False
    EndIf

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

    ; Wenn ein Fehler aufgetreten ist, wird der Fehlercode angezeigt und False zurückgegeben.
    If @error Then
        $iError = @error
        MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), Default, "Fehler bei DllStructCreate, Code: " & $iError)
        Return False
    EndIf

    ; Anmerkungen: - Die Strukturen zeigen auf dieselbe Struktur (sie haben denselben Zeiger).
    ; Das erste Element kam mit:
    ; *tSTRUCT1 Struktur wird ein int sein.
    ; *tSTRUCT2 Struktur wird ein unsigned int sein (das Element wurde gecasted von int zu uint).
    ; *tSTRUCT3 Struktur wird ein float sein (das Element wurde gecasted von int zu float).
    ;
    ; -Der Casting-Operator "reinterpret_cast" wird verwendet.

    ; Setzt die Daten des ersten Elements (int) in $tSTRUCT1.
    DllStructSetData($tSTRUCT1, 1, -1)

    ; Zeigt die verschiedenen Datentypen derselben Daten an.
    MsgBox($MB_SYSTEMMODAL, "", _
            "int: " & DllStructGetData($tSTRUCT1, 1) & @CRLF & _
            "uint: " & DllStructGetData($tSTRUCT2, 1) & @CRLF & _
            "float: " & DllStructGetData($tSTRUCT3, 1))

    ; Gibt die von den Strukturen verwendeten Ressourcen frei.
    $tSTRUCT1 = 0
    $tSTRUCT2 = 0
    $tSTRUCT3 = 0
EndFunc   ;==>Example