调用动态链接库出现Run-Time Check Failure #0错误
错误信息
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.
(Press Retry to debug the application)
-----------------------------------------------------------------------------------
我的代码:
typedef char *(*GYQE)(char* buffer);
typedef int(*OmrSG)(char* buffer);
.....
OmrSG OmrS, OmrG;
GYQE gyqe;
HINSTANCE glib;
glib=LoadLibrary("omrdrive.dll");
if (glib!=NULL)
{
gyqe=(GYQE)GetProcAddress(glib,"gyqe");
OmrS=(OmrSG)GetProcAddress(glib,"OmrS");
OmrG=(OmrSG)GetProcAddress(glib,"OmrG");
jstring name;
char CommandStr[256],Buffer[256];
strcpy(CommandStr,"S FormatFile");
try{
OmrS(CommandStr);
strcpy(CommandStr,"/");
OmrS(CommandStr);
OmrG(Buffer);
if (!strncmp(Buffer,"OK",2))
{
strcpy(CommandStr,"001 /");
OmrS(CommandStr);//送取数据命令
OmrG(Buffer);//取返回字串
}
else
{
strcpy(CommandStr,"-/");
OmrS(CommandStr);
}
}
catch(CException* lpExp)
{
}
AfxMessageBox(Buffer);
}
if (!gyqe)
FreeLibrary(glib);
----------------------------------------------------------------------------------
那个dll的文档中这样说明
1. Microsoft Virtual C 6.0实例
int OmrS(char * CommandStr)
int OmrG(char * Buffer) (PowerBuilde 中用char * PBOmrG(char * Buffer))
两个函数完成,或由char * gyqe(char * Buffer)一个函数完成。
实例:
//动态加载动态链接库OMRDRIVE.DLL
typedef char * ( * GYQE)(char * buffer);
typedef int( * OmrSG)(char * buffer);
OmrSG OmrS, OmrG;
GYQE gyqe;
HINSTANCE glib;
glib=LoadLibrary("OMRDRIVE.DLL");
if (glib!=NULL) {
gyqe=(GYQE)GetProcAddress(glib,"gyqe");
OmrS=(OmrSG)GetProcAddress(glib,"OmrS");
OmrG=(OmrSG)GetProcAddress(glib,"OmrG");
if (!gyqe) {
FreeLibrary(glib);
return;
}
}
else
return;
......
char CommandStr[256],Buffer[256];
strcpy(CommandStr,"S FormatFile"); //送格式命令
strcpy(CommandStr,"/");
OmrS(CommandStr); //送格式命令
OmrG(Buffer); //取读卡返回字串
//gyqe(CommandStr); //可以代替OmrS、OmrG
if (!strncmp(Buffer,"OK",2)){
strcpy(CommandStr,"001 /");
OmrS(CommandStr); //送取数据命令
OmrG(Buffer); //取返回字串
}
else{
strcpy(CommandStr,"-/");
OmrS(CommandStr);
}