在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/20/3061ac7d-8761-4ac4-9df7-5c8aa94e565c.html
http://blog.vckbase.com/arong/archive/2004/06/09/409.html 回复 16# baikaifang
非常感谢你提供的资源! 我用那个函数查看器 看某个dll没有看到导出函数 回复yiruirui
在Dll中声明函数的导出方式时,如果不加修饰符 _stdcall ,则该函数在导出后,其调用方 ...
baikaifang 发表于 2010-11-12 18:12 http://www.autoitx.com/images/common/back.gif
总结的很全面,个人觉得还是au3只支持了标准的Win32程序调用。网上有人说,_stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中 学习下学习下 回复 11# baikaifang
真是大好人! 不错的东西。。。。。。。
页:
1
[2]