stdcall与DLL
来源:互联网 发布:电路图绘制软件有哪些 编辑:程序博客网 时间:2024/05/16 10:52
如果通过VC++编写的DLL欲被其他语言编写的程序调用,应将 函数的调用方式声明为__stdcall方式,WINAPI都采用这种方式,而C/C++缺省的调用方式却为__cdecl。__stdcall方式与 __cdecl对函数名最终生成符号的方式不同。若采用C编译方式(在C++中需将函数声明为extern "C"),__stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_functionname@number;而 __cdecl调用约定仅在输出函数名前面加下划线,形如_functionname。
Windows编程中常见的几种函数类型声明宏都是与__stdcall和__cdecl有关的(节选自windef.h):
#define CALLBACK __stdcall //这就是传说中的回调函数
#define WINAPI __stdcall //这就是传说中的WINAPI
#define WINAPIV __cdecl
#define APIENTRY WINAPI //DllMain的入口就在这里
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
在lib.h中,应这样声明add函数:
int __stdcall add(int x, int y);
在应用工程中函数指针类型应定义为:
typedef int(__stdcall *lpAddFun)(int, int);
若在lib.h中将函数声明为__stdcall调用,而应用工程中仍使用typedef int (* lpAddFun)(int,int),运行时将发生错误(因为类型不匹配,在应用工程中仍然是缺省的__cdecl调用),弹出如图7所示的对话框。
图7 调用约定不匹配时的运行错误
- stdcall与DLL
- stdcall与DLL
- stdcall与DLL
- _cdecl 与 stdcall(pascal)
- stdcall与_cdecl区别
- stdcall 以及 其他的dll调用方式
- VC 编写 stdcall 方式的DLL
- VC 编写 stdcall 方式的DLL
- stdcall
- stdcall
- stdcall
- stdcall
- stdcall
- stdcall 与 _cdecl 的区别
- stdcall与cdecl的区别
- dll中的函数的调用方式统一用stdcall
- Stdcall and DLL tools of MSVC and MinGW
- [转]Stdcall and DLL tools of MSVC and MinGW
- IT产品类企业网站设计方案
- ASP.net页面跳转方式解析
- LibCurl编程手册以及代码实例
- SQL Server2005中使用XML-FOR XML(RAW模式查询)
- 用JDBC和Hibernate来写入Blob型数据到Oracle中
- stdcall与DLL
- IT产品类企业网站设计方案
- NetBeans Weeldy News 刊号 # 47 - Mar 03, 2009
- inotify的工作原理
- 学习视频下载
- PHPRPC 3.0.2 for java 试用示例演示
- 最简单的JAVA程序
- Linux下LibCurl编程
- 货币转英文