在动态库中定义了一个小函数extern "C" _declspec(dllexport) int Add(int i,int j); 然后在建立一个测试工程,在工程中我显式调用库中的函数,先定义一个函数指针 如下:
typedef int (* pFun)(int,int);
程序运行没有问题
后来我这样定义函数指针
typedef int (CALLBACK* pFun)(int,int);程序崩溃了。请问什么时候该加CALLBACK,什么时候不用加呢?
typedef int (* pFun)(int,int);
程序运行没有问题
后来我这样定义函数指针
typedef int (CALLBACK* pFun)(int,int);程序崩溃了。请问什么时候该加CALLBACK,什么时候不用加呢?
解决方案 »
- 请教!ATL实现多接口,VBS中如何调用非默认接口?
- 怎么去悼系统菜单栏?
- 37天过后,GetTickCount()时间若溢出复位,时间差会不会有问题?可不可以TickCount复位?
- 内存优化的原理是什么?如何实现?
- 关于WriteFile的问题。
- 【VC++】【VC++面向对象与可视化程序设计】【黄维通】
- 当老爸啦。散分。
- 俺是VC业余级爱好者,在这经常能看到vxd这东西,请问这东西是干嘛用的?在2000下能干啥???给个最简单最简单的例子okay?谢谢!
- 求助 : directshow播放直播流,如何获得缓存的数据
- 有谁对OpenGL熟悉,求教! [email protected]
- 为什么调试动态库时在调用库中函数处按F11结果却进入不了动态库里?
- 软件通过网络激活的原理是什么呢?
http://blog.csdn.net/guo_wei/archive/2007/10/18/1830394.aspx
C++默认的调用约定是__cdcel,退出时由调用者恢复栈,这样,可以实现变参。
CALLBACK是__stdcall,退出时,被调用者恢复栈。
所以,崩溃就可以理解了,栈被试图恢复两次。
_declspec(dllexport) int _stdcall Add(int i,int j)
{
return i+j;
}
dll还是应用程序?
_declspec(dllexport) int _stdcall Add(int i,int j)
{
return i+j;
}在.exe中这样声明函数指针:
typedef int (_stdcall * pFun)(int,int);
...
可是运行总是通不过。