itljl 发表于 2010-4-22 20:53:16

旧版能用dllcall新版却不行

同一样一个dll,同样调用方式

$result= DllCall($dll, "long", "GetBIP","string","");每秒都抓包取出疑似IP
MsgBox(0,0,@error)

autoit3(au3)汉化版3.3.0.0.1 调用正常。 没有错误

而 .3.3.5.X 及以上的版本就不正常。。附上DLL请各位帮助测试一下,谢谢。

itljl 发表于 2010-4-22 21:14:06

打到原因了。
终于搞明白了。

$result= DllCall("au3.dll", "long", "GetBIP","string","");
改为
$result= DllCall("au3.dll", "long", "GetBIP","str","");
即可。刚才我仔细翻了一下AU3的文档发现有long这个数据类型,却没有string这个数据类型,而只有
str ANSI 字符串(不能超过 65536 个字符).这个数据类型

并且 AU3的 STR 相当于WINAPI 的 LPCSTR/LPSTR,我想这里AU3的str也相当于VB的 string


但不明白 是,为什么旧版本却string可以。

sensel 发表于 2010-4-25 00:26:46

3.3.2.0调整过参数类型,与MSDN上的定义更接近。
另外有些类型定义也有改变,比如byte以前定义为8位整型,现在是无符号8位整型。

gto250 发表于 2010-4-25 07:30:32

原来如此,谢谢了,我也学到了

itljl 发表于 2010-4-26 12:04:37

回复 3# sensel


    与MSDN上的定义更接近 的话,那应该是string有效才对啊?而不str.
感谢回答。
页: [1]
查看完整版本: 旧版能用dllcall新版却不行