找回密码
 加入
搜索
楼主: yiruirui

[AU3基础] 自己用VC6写了一个DLL,非常简单,但是用DLLCALL发现调用没效果?(已解决)

 火.. [复制链接]
发表于 2010-11-12 18:12:29 | 显示全部楼层
回复 15# yiruirui

在Dll中声明函数的导出方式时,如果不加修饰符 _stdcall ,则该函数在导出后,其调用方式为 cdecl (C/C++调用约定),然而AU3 DllCall 函数的默认调用方式就是 stdcall (标准调用约定) ,所以在声明DLL中函数的导出方式时要使用 _stdcall 修饰符。 后面之所以使用 .def 文件定义函数导出的名字,而不是直接在源文件中使用 _declspec(dllexport) 定义导出函数,那是因为 _declspec(dllexport) 定义的导出函数,在编译时,编译器会对函数的名字进行改编,也就是说你定义的函数名 int 和 subtract 在编译后,名字会被改变的,而使用 .def 文件时,编译器就会按 .def 文件中的名字对函数命名,不变改编函数原名成其它名字。

有兴趣的话,可以了解以下内容:
http://topic.csdn.net/u/20090713 ... 7-5c8aa94e565c.html

http://blog.vckbase.com/arong/archive/2004/06/09/409.html
 楼主| 发表于 2010-11-13 14:26:39 | 显示全部楼层
回复 16# baikaifang


    非常感谢你提供的资源!
发表于 2010-11-13 19:28:13 | 显示全部楼层
我用那个函数查看器 看某个dll没有看到导出函数
发表于 2010-11-14 08:33:57 | 显示全部楼层
回复  yiruirui

在Dll中声明函数的导出方式时,如果不加修饰符 _stdcall ,则该函数在导出后,其调用方 ...
baikaifang 发表于 2010-11-12 18:12


总结的很全面,个人觉得还是au3只支持了标准的Win32程序调用。网上有人说,_stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中
发表于 2010-11-17 12:47:27 | 显示全部楼层
学习下学习下
发表于 2012-11-17 23:19:56 | 显示全部楼层
回复 11# baikaifang

真是大好人!
发表于 2016-1-17 10:26:17 | 显示全部楼层
不错的东西。。。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 07:45 , Processed in 0.069355 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表