wsmoxiannan 发表于 2013-3-6 20:02:08

【已解决】调用DLL传递指针和引用的问题

本帖最后由 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文件

Duvet 发表于 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 & @CRLF)
ConsoleWrite( _
        Binary($aRet) & @CRLF & _
        $aRet & @CRLF)



Global $aRet, $hGuidData
$hGuidData = DllStructCreate("BYTE GuidData;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 & @CRLF)
ConsoleWrite( _
        DllStructGetData($hGuidData, "GuidData") & @CRLF & _
        DllStructGetData($hGuidData, "dwGuidDataSize") & @CRLF)

wsmoxiannan 发表于 2013-3-6 21:59:57

回复 2# Duvet

万分感谢兄弟你的帮助,我先参考你的调用方式去测试一下

wsmoxiannan 发表于 2013-3-6 22:49:10

回复 3# wsmoxiannan
测试结果好像还是不行,明早回公司再确认吧。

wsmoxiannan 发表于 2013-3-7 11:26:40

回复 2# Duvet

谢谢,经测试已经调用成功了,用你的代码我这边测试返回的长度是72,是正确的。不过有个问题想请教你,$aRet返回的是一个地址,我怎么样才能取得这个地址对应的值呢?那个值应该是长度为72的字符串。

whrgxl8687 发表于 2014-2-19 11:26:46

正是我需要的啊
页: [1]
查看完整版本: 【已解决】调用DLL传递指针和引用的问题