找回密码
 加入
搜索
查看: 5134|回复: 5

[系统综合] 【已解决】调用DLL传递指针和引用的问题

  [复制链接]
发表于 2013-3-6 20:02:08 | 显示全部楼层 |阅读模式
本帖最后由 wsmoxiannan 于 2013-3-7 11:27 编辑

大家好,求助大家一个问题,现在公司需要使用Autoit调用研发的接口做接口测试,但是现在有一个问题,研发不确定DLL里封装的函数的参数类型Autoit调用是否都支持,主要是两个类型,指针的指针类型参数、引用类型的参数,所以现在写了一个简单的DLL来让我测试一下,具体内容如下:
// PBYTE* pGuidData: 要求*pGuidData = NULL;保存返回的GUID信息,
//                   需要调用StrOpt_FreeSpace接口释放内存
// DWORD& dwGuidDataSize: 保存返回的GUID数据的字节长度;
// 返回值:
// 0表示成功,非0表示失败
int WINAPI StrOpt_GetGuidData(PBYTE* pGuidData, DWORD& dwGuidDataSize);
int WINAPI StrOpt_FreeSpace(PBYTE* pData);
调用StrOpt_GetGuidData这个方法,其中PBYTE* pGuidData参数需要传递一个指针,DWORD& dwGuidDataSize为需要传递一个引用,成功会返回0,失败为非0,现在我不知道怎么去传这两个参数来调用,请求各位帮助,使用DLLCALL时如何传递这两个参数
附件为测试的DLL文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2013-3-6 21:50:37 | 显示全部楼层
GuidData返回長度只有4,是我搞錯了嗎?



Global $aRet
$aRet = DllCall(@ScriptDir & "/NumOptTest.dll", "int", "StrOpt_GetGuidData", _
        "int*", 0, _
        "DWORD*", 0)
If @error Then Exit(-1)
ConsoleWrite("Return Code: " & $aRet[0] & @CRLF)
ConsoleWrite( _
        Binary($aRet[1]) & @CRLF & _
        $aRet[2] & @CRLF)



Global $aRet, $hGuidData
$hGuidData = DllStructCreate("BYTE GuidData[4];DWORD dwGuidDataSize")
$aRet = DllCall(@ScriptDir & "/NumOptTest.dll", "int", "StrOpt_GetGuidData", _
        "PTR", DllStructGetPtr($hGuidData, "GuidData"), _
        "PTR", DllStructGetPtr($hGuidData, "dwGuidDataSize"))
If @error Then Exit(-1)
ConsoleWrite("Return Code: " & $aRet[0] & @CRLF)
ConsoleWrite( _
        DllStructGetData($hGuidData, "GuidData") & @CRLF & _
        DllStructGetData($hGuidData, "dwGuidDataSize") & @CRLF)
 楼主| 发表于 2013-3-6 21:59:57 | 显示全部楼层
回复 2# Duvet

万分感谢兄弟你的帮助,我先参考你的调用方式去测试一下
 楼主| 发表于 2013-3-6 22:49:10 | 显示全部楼层
回复 3# wsmoxiannan
测试结果好像还是不行,明早回公司再确认吧。
 楼主| 发表于 2013-3-7 11:26:40 | 显示全部楼层
回复 2# Duvet

谢谢,经测试已经调用成功了,用你的代码我这边测试返回的长度是72,是正确的。不过有个问题想请教你,$aRet[1]返回的是一个地址,我怎么样才能取得这个地址对应的值呢?那个值应该是长度为72的字符串。
发表于 2014-2-19 11:26:46 | 显示全部楼层
正是我需要的啊
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-24 10:16 , Processed in 0.077179 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表