yiruirui 发表于 2010-11-10 14:50:34

自己用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!
附近也放上来了.

rolaka 发表于 2010-11-10 15:22:28

$a是个数组...

yiruirui 发表于 2010-11-10 15:56:59

回复 2# rolaka


    那我的这个DLL如何才能看到效果呢?
$dll = DllOpen("user32.dll")
$a=DllCall($dll,"int","add","int",23,"int",45)
MsgBox(0,"dll",@error)
结果显示3,说没有找函数的定义,但是我明确定义了的,在MFC中也测试过了的!

gaojie6619063 发表于 2010-11-10 16:13:22

$a=DllCall("dll.dll","int","add","int",23,"int",45)
MsgBox(0,"dll",$a)
你试试

yiruirui 发表于 2010-11-10 17:30:25

回复 4# gaojie6619063


   测试了,运行没任何反映,没输出任何东西!

yiruirui 发表于 2010-11-10 17:55:47

代码给出,编译好的dll也给出,麻烦高手给解决一下,求高手路过..................

rolaka 发表于 2010-11-10 18:05:27

本帖最后由 rolaka 于 2010-11-10 18:12 编辑


默认情况下, AutoIt 使用 'stdcall' 调用方式. 要使用 'cdecl' 方式调用,请在返回值类型后面加上 ':cdecl' .
DllCall("SQLite.dll", "int:cdecl", "sqlite3_open", "str", $sDatabase_Filename , "long*", 0).
你的dll我查不到函数名

yiruirui 发表于 2010-11-10 20:19:10

回复 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就是函数名。

19377708 发表于 2010-11-10 20:55:39

学习学习!

rolaka 发表于 2010-11-10 22:46:54


http://www.onlinedown.net/soft/17471.htm
自己下了用

baikaifang 发表于 2010-11-12 00:50:04

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
详情可参考附件示例。

jhwl 发表于 2010-11-12 01:03:14

使用Depends工具可查看导出函数名,以上11楼可正解。

auhj887 发表于 2010-11-12 07:17:20

学习,学习。。。。。。。。。。。

karlpopper 发表于 2010-11-12 10:36:07

这个好东西啊

yiruirui 发表于 2010-11-12 13:33:00

回复 11# baikaifang


    非常感谢你的回答!能告诉一下理由吗?或者有什么依据,让我去学习以下好吗?
页: [1] 2
查看完整版本: 自己用VC6写了一个DLL,非常简单,但是用DLLCALL发现调用没效果?(已解决)