基 础 函 数 参 考


DllStructGetPtr

返回数据结构指针,或者数据结构的一个元素.

DllStructGetPtr ( 结构 [,元素])

参 数

结构 DllStructCreate 返回的数据结构.
元素 [可选参数] 数据结构元素基于 1 的指针, 或者由 DllStructCreate 函数定义的元素名.

返 回 值

成功: 返回数据结构的指针.
失败: 返回 0.
@Error: 0 = 无错误.
1 = DllStructCreate 函数返回的数据结构不正确.
2 = 元素值超出范围.

备 注

在 DllCall 函数内使用.

相 关 函 数

DllCall, DllStructCreate

函 数 示 例


;示例 1
;获取窗口句柄并使用 WinGetPos 获取窗口矩形
Local $hwnd = WinGetHandle("")
Local $coor = WinGetPos($hwnd)

;创建数据结构
Local $rect = DllStructCreate("int;int;int;int")

;生成 DllCall
DllCall("user32.dll", "int", "GetWindowRect", _
        "hwnd", $hwnd, _
        "ptr", DllStructGetPtr($rect)) ; 调用 DllCall 时使用 DllStructGetPtr

;获取返回的矩形
Local $l = DllStructGetData($rect, 1)
Local $t = DllStructGetData($rect, 2)
Local $r = DllStructGetData($rect, 3)
Local $b = DllStructGetData($rect, 4)

;释放数据结构
$rect = 0

;显示 WinGetPos 的结果和返回的矩形
MsgBox(0, "测试 :)", "WinGetPos(): (" & $coor[0] & "," & $coor[1] & _
        ") (" & $coor[2] + $coor[0] & "," & $coor[3] + $coor[1] & ")" & @CRLF & _
        "GetWindowRect(): (" & $l & "," & $t & ") (" & $r & "," & $b & ")")

;示例 2
; DllStructGetPtr 参考项目
Local $a = DllStructCreate("int")
If @error Then
    MsgBox(0, "", "DllStructCreate 发生错误 " & @error);
    Exit
EndIf

$b = DllStructCreate("uint", DllStructGetPtr($a, 1))
If @error Then
    MsgBox(0, "", "DllStructCreate 发生错误 " & @error);
    Exit
EndIf

Local $c = DllStructCreate("float", DllStructGetPtr($a, 1))
If @error Then
    MsgBox(0, "", "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

provider with jb51.net (unicode)