VC中编写DLL的函数声明问题
来源:互联网 发布:vb续行符 编辑:程序博客网 时间:2024/05/20 04:29
http://blog.csdn.net/jamestaosh/article/details/4237757
编写动态链接库时,注意:::
4.5 __stdcall约定
如果通过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 调用约定不匹配时的运行错误
图8中的那段话实际上已经给出了错误的原因,即“This is usually a result of …”。- VC中编写DLL的函数声明问题
- VS2008的DLL导出函数声明问题!
- VC中.dll文件的编写
- VC中.dll文件的编写
- x64平台下VC++中汇编函数的编写问题
- 关于delphi调用vc编写的dll中参数类型有关问题
- DELPHI调用VC编写的DLL 函数参数为LPTSTR
- delphi调用vc编写的DLL应注意的问题
- VC中“GetVersionExW函数被声明为已否决”的问题?
- VC DLL的编写调用
- 总结一下DLL函数声明的一些问题
- 在VC编写的DLL中导出C++类
- 在C#中调用VC编写的dll库
- 在C#中调用VC编写的dll库
- VC中编写Non MFC DLL的方法总结
- 在vb,vc中调用vb编写的DLL
- 在C#中调用VC编写的dll库
- Delphi中调用VC编写的DLL内对象
- 剑指Offer系列---(3)赋值运算符函数
- mac开启ssh的方法
- 【Android】Fragment真正意义上的onResume和onPause
- hdoj题目分类
- HDU 1711
- VC中编写DLL的函数声明问题
- PHP常用基础算法(未完待续)
- uva12325(greedy)
- mac虚拟机工具VMware Tools Darwin
- 微信收货地址共享开发接口讲解
- APP上架被拒解决方案
- linux send与recv函数详解
- ChipScope使用总结
- 小谈如何解决问题