Gibt den Zeiger auf die Struktur oder ein Element in der Struktur zurück.
DllStructGetPtr ( Struct [, Element] )
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. |
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. |
Verwendet in DllCall().
#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
#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