自己用VC6写了一个DLL,非常简单,但是用DLLCALL发现调用没效果?(已解决)
本帖最后由 yiruirui 于 2010-11-13 14:27 编辑用VC6写了如下代码:
_declspec(dllexport)int add(int a,int b)
{
return a+b;
}
_declspec(dllexport)int subtract(int a,int b)
{
return a-b;
}
就上很简单的加,减操作,然后编译成了一个dll.dll文件.
接着用AU3去调用,
代码如下:
$a=DllCall("dll.dll","int","add","int",23,"int",45)
MsgBox(0,"dll",$a)
结果输出为0,非常的好奇,为什么我的DLL没发挥作用?请大虾门给小弟指点指点关键所在,3Q!
附近也放上来了. $a是个数组... 回复 2# rolaka
那我的这个DLL如何才能看到效果呢?
$dll = DllOpen("user32.dll")
$a=DllCall($dll,"int","add","int",23,"int",45)
MsgBox(0,"dll",@error)
结果显示3,说没有找函数的定义,但是我明确定义了的,在MFC中也测试过了的! $a=DllCall("dll.dll","int","add","int",23,"int",45)
MsgBox(0,"dll",$a)
你试试 回复 4# gaojie6619063
测试了,运行没任何反映,没输出任何东西! 代码给出,编译好的dll也给出,麻烦高手给解决一下,求高手路过.................. 本帖最后由 rolaka 于 2010-11-10 18:12 编辑
默认情况下, AutoIt 使用 'stdcall' 调用方式. 要使用 'cdecl' 方式调用,请在返回值类型后面加上 ':cdecl' .
DllCall("SQLite.dll", "int:cdecl", "sqlite3_open", "str", $sDatabase_Filename , "long*", 0).
你的dll我查不到函数名 回复 7# rolaka
declspec(dllexport)int add(int a,int b)
{
return a+b;
}
_declspec(dllexport)int subtract(int a,int b)
{
return a-b;
}
add subtract就是函数名。 学习学习!
http://www.onlinedown.net/soft/17471.htm
自己下了用 Dll 中的函数导出方式不正确,用下面的方法声明。int _stdcall add(int a,int b)
{
return a+b;
}
int _stdcall subtract(int a,int b)
{
return a-b;
}
并且在工程中添加一个 .def 文件,定义函数的导出名字,代码如下:LIBRARY Dll 的名字
EXPORTS
add
subtract
详情可参考附件示例。 使用Depends工具可查看导出函数名,以上11楼可正解。 学习,学习。。。。。。。。。。。 这个好东西啊 回复 11# baikaifang
非常感谢你的回答!能告诉一下理由吗?或者有什么依据,让我去学习以下好吗?
页:
[1]
2