Funktionsreferenz

DllStructGetPtr

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: 0 = Kein Fehler.
1 = Struct ist keine korrekte Struktur aus DllStructCreate zurückgegeben.
2 = Element ist ausserhalb des Index.

 

Bemerkungen

Verwendet in DllCall.

 

Verwandte Funktionen

DllCall, DllStructCreate

 

Beispiel


; Beispiel 1
; Windows-Handle und Position auslesen
$hwnd   = WinGetHandle("")
$coor   = WinGetPos($hwnd)

; Struktur erzeugen
$rect   = DllStructCreate("int;int;int;int")

; DLL-Funktion aufrufen
DLLCall("user32.dll","int","GetWindowRect", _
        "hwnd",$hwnd, _
        "ptr",DllStructGetPtr($rect)) ; Zeiger auf Struktur mit DllStructGetPtr übergeben

; Rechteckdaten auslesen
$l = DllStructGetData($rect,1)
$t = DllStructGetData($rect,2)
$r = DllStructGetData($rect,3)
$b = DllStructGetData($rect,4)

; Struktur freigeben
$rect = 0

; Windows-Position und Rechteckdaten ausgeben
MsgBox(0,"The Larry Test :)","WinGetPos(): (" & $coor[0] & "," & $coor[1] & _
        ") (" & $coor[2] + $coor[0] & "," & $coor[3] + $coor[1] & ")" & @CRLF & _
        "GetWindowRect(): (" & $l & "," & $t & ") (" & $r & "," & $b & ")")

; Beispiel 2
; DllStructGetPtr zum Erzeugen einer Referenz auf ein Strukturelement (vergleichbar mit union in C++)
$a          = DllStructCreate("int")
if @error Then
    MsgBox(0,"","Fehler in DllStructCreate " & @error);
    exit
endif

$b  = DllStructCreate("uint",DllStructGetPtr($a,1))
if @error Then
    MsgBox(0,"","Fehler in DllStructCreate " & @error);
    exit
endif

$c  = DllStructCreate("float",DllStructGetPtr($a,1))
if @error Then
    MsgBox(0,"","Fehler in DllStructCreate " & @error);
    exit
endif

;Daten eintragen
DllStructSetData($a,1,-1)

;=========================================================
;   Ausgeben der verschiedenen Datentypen
;=========================================================
MsgBox(0,"DllStruct", _
        "int: " & DllStructGetData($a,1) & @CRLF & _
        "uint: " & DllStructGetData($b,1) & @CRLF & _
        "float: " & DllStructGetData($c,1) & @CRLF & _
        "")

; Struktur freigeben
$a = 0