基 础 函 数 参 考


DllStructGetData

返回数据结构元素的数据.

DllStructGetData ( 结构, 元素 [, 索引] )

参 数

结构 由 DllStructCreate 返回的数据结构.
元素 要访问的数据结构元素, 起始于 1 或由 DllStructCreate 函数定义的元素名.
索引 [可选参数] 对于数组元素,需指定基于 1 的元素索引.
如果省略或 Default(默认)关键字, 则检索整个数组 (用于快速检索字符串).
不用于非数组元素
*char[n], byte[n] 与 ubyte[n] 省略索引时, 返回所有元素数据.

返 回 值

成功: 返回数据结构的元素数据.
失败: 返回 0.
@Error: 0 = 无错误.
1 = DllStructCreate 函数返回的数据结构不正确.
2 = 元素值超出范围.
3 = 索引值在数据结构外面.
4 = 元素的数据类型未知
5 = 索引 <= 0.

备 注

当元素为 char[n], 并且索引被省略时,返回的数据是字符串,
当元素为 byte[n] 或 ubyte[n], 并且索引被省略时,返回二进制数据类型,
否则它总是返回一个数字.

相 关 函 数

DllStructCreate, DllStructSetData

函 数 示 例


Local $p = DllStructCreate("dword dwOSVersionInfoSize;dword dwMajorVersion;dword dwMinorVersion;dword dwBuildNumber;dword dwPlatformId;char szCSDVersion[128]")

;请想象为这样(C++样式):  p->dwOSVersionInfoSize = sizeof(OSVERSIONINFO)
DllStructSetData($p, "dwOSVersionInfoSize", DllStructGetSize($p))

;生成 DllCall
Local $ret = DllCall("kernel32.dll", "int", "GetVersionEx", "ptr", DllStructGetPtr($p))

If Not $ret[0] Then
    MsgBox(0, "DllCall 错误", "DllCall 失败")
    Exit
EndIf

;获取返回值
Local $major = DllStructGetData($p, "dwMajorVersion")
Local $minor = DllStructGetData($p, "dwMinorVersion")
Local $build = DllStructGetData($p, "dwBuildNumber")
Local $platform = DllStructGetData($p, "dwPlatformId")
Local $version = DllStructGetData($p, "szCSDVersion")

;释放数据结构占用的内存
$p = 0

MsgBox(0, "", "Major: " & $major & @CRLF & _
        "Minor: " & $minor & @CRLF & _
        "Build: " & $build & @CRLF & _
        "Platform ID: " & $platform & @CRLF & _
        "Version: " & $version)


provider with jb51.net (unicode)