【已解决】调用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文件
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)
回复 2# Duvet
万分感谢兄弟你的帮助,我先参考你的调用方式去测试一下 回复 3# wsmoxiannan
测试结果好像还是不行,明早回公司再确认吧。 回复 2# Duvet
谢谢,经测试已经调用成功了,用你的代码我这边测试返回的长度是72,是正确的。不过有个问题想请教你,$aRet返回的是一个地址,我怎么样才能取得这个地址对应的值呢?那个值应该是长度为72的字符串。 正是我需要的啊
页:
[1]