構造体、構造体の要素へのポインタを返します。
DllStructGetPtr ( Struct [,Element])
パラメータ
Struct | DllStructCreateが返す構造体 |
Element | [オプション] ポインタが必要な構造体の要素。1 始まり、または要素名がDllStructCreateで定義されている必要があります。 |
返し値
成功 | 構造体へのポインタ |
失敗 | 0 |
@Error: | 0 = エラーなし。 |
1 = 構造体がDllStructCreateによって返された正常な構造体ではない。 | |
2 = Elementが範囲外。 |
注意
DllCallで使用します。
関連
DllCall, DllStructCreate
例
;例1
; ウィンドウハンドルを取得して、WinGetPosを使用してウィンドウの長方形情報を取得
$hwnd = WinGetHandle("")
$coor = WinGetPos($hwnd)
; 構造体作成
$rect = DllStructCreate("int;int;int;int")
; DllCall実行
DLLCall("user32.dll","int","GetWindowRect", _
"hwnd",$hwnd, _
"ptr",DllStructGetPtr($rect)) ; DllCall呼び出し時にDllStructGetPtrを使用
;返された長方形情報を取得
$l = DllStructGetData($rect,1)
$t = DllStructGetData($rect,2)
$r = DllStructGetData($rect,3)
$b = DllStructGetData($rect,4)
;構造体を解放
$rect = 0
;WinGetPosの結果と返された長方形情報を表示
MsgBox(0,"The Larry Test :)","WinGetPos(): (" & $coor[0] & "," & $coor[1] & _
") (" & $coor[2] + $coor[0] & "," & $coor[3] + $coor[1] & ")" & @CRLF & _
"GetWindowRect(): (" & $l & "," & $t & ") (" & $r & "," & $b & ")")
;例2
; DllStructGetPtr アイテムを参照
$a = DllStructCreate("int")
if @error Then
MsgBox(0,"","Error in DllStructCreate " & @error);
exit
endif
$b = DllStructCreate("uint",DllStructGetPtr($a,1))
if @error Then
MsgBox(0,"","Error in DllStructCreate " & @error);
exit
endif
$c = DllStructCreate("float",DllStructGetPtr($a,1))
if @error Then
MsgBox(0,"","Error in DllStructCreate " & @error);
exit
endif
;データを設定
DllStructSetData($a,1,-1)
;=========================================================
; 同じデータを異なるデータ型で表示
;=========================================================
MsgBox(0,"DllStruct", _
"int: " & DllStructGetData($a,1) & @CRLF & _
"uint: " & DllStructGetData($b,1) & @CRLF & _
"float: " & DllStructGetData($c,1) & @CRLF & _
"")
; 割り当てられたメモリの解放
$a = 0