我用MFC向导建立一个DLL。.h文件:
class Cm1App : public CWinApp
{
public:
Cm1App();// 重写
public:
virtual BOOL InitInstance();
int getx(int x); DECLARE_MESSAGE_MAP()
};…….cpp文件:
int Cm1App::getx( int x )
{
return x;
}……
def文件:
; m1.def : 声明 DLL 的模块参数。LIBRARY "m1"EXPORTS
; 此处可以是显式导出
getx
然后在调用时:
typedef int (*pGetx)(int x);
void CTestView::OnBnClickedButton1()
{
HINSTANCE h= AfxLoadLibrary(L"m1.dll");
if(h)
{
pGetx getx=(pGetx) GetProcAddress(h, "getx");
int x=getx(9); }
}结果运行时报错:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.这是什么问题呢?该如何解决?
class Cm1App : public CWinApp
{
public:
Cm1App();// 重写
public:
virtual BOOL InitInstance();
int getx(int x); DECLARE_MESSAGE_MAP()
};…….cpp文件:
int Cm1App::getx( int x )
{
return x;
}……
def文件:
; m1.def : 声明 DLL 的模块参数。LIBRARY "m1"EXPORTS
; 此处可以是显式导出
getx
然后在调用时:
typedef int (*pGetx)(int x);
void CTestView::OnBnClickedButton1()
{
HINSTANCE h= AfxLoadLibrary(L"m1.dll");
if(h)
{
pGetx getx=(pGetx) GetProcAddress(h, "getx");
int x=getx(9); }
}结果运行时报错:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.这是什么问题呢?该如何解决?
解决方案 »
- 如何迫使alt activex的ondraw被调用?
- 初涉网络编程,急需一个小例程,实现功能:服务端与客户端(在Internet上,不是仅限局域网内)通过TCP实现数据传输。谢谢
- VC++中如何删除已建立的文件
- 关于工程文件
- VC工具的小问题。
- 如何创建一个 关键系统进程
- 又穿一层马甲,再放200分——顺便问一个大家职业生涯都可能遇到的问题
- (--=高分哦=--)如何用程序实现预览尚未安装的字体?
- 如何结合isapi、xml和xsl来做web服务程序 vc+isapi+xml+xsl
- bitblt在windows服务中发生句柄无效错误,如何解决
- 在一个程序中调用另一个程序
- 关于WTL窗口样式动态改变的问题。
使用定义文件可以有效的避免这个问题,这种方法是利用宏定义在不同的地方产生不同的编译代码:1.
在头文件中加入如下的代码: #ifdef _CLASSINDLL
#define CLASSINDLL_CLASS_DECL __declspec(dllexport)
#else
#define CLASSINDLL_CLASS_DECL __declspec(dllimport)
#endif
#endif // ClassInDLL_H
class CLASSINDLL_CLASS_DECL CInDLL {
...
};2.
在实现这个类的CPP文件的顶部加入#define _CLASSINDLL语句。
#define _CLASSINDLL 这样一来在使用这个类时就可以不做任何改动了.