关于Run-Time Check Failure #0 The value of ESP was not properly saved across a function call的问题!
HINSTANCE hInst;
//加载动态链接库
hInst=LoadLibrary("chj800u.dll");
/*
功能:打开usb评价器虚拟串口,并与设备建立连接
返回值:成功:返回相应的串口句柄 >0
失败:返回 -1
*/
typedef long (_stdcall *PJQ_Open)();
/*
功能:与设备断开连接,并关闭usb评价器虚拟串口
返回值:成功: 0
失败: -1
*/
typedef long (__stdcall *PJQ_Close)();
//初始化评价器
PJQ_Open Open=(PJQ_Open)GetProcAddress(hInst,"PJQ_Open");
//关闭评价器
PJQ_Close Close=(PJQ_Close)GetProcAddress(hInst,"PJQ_Close");
if(!Open)
{
MessageBox("获取函数地址失败!");
return;
}
//调用时出错!
long hand=Open();
EvaluateWait(hand,3);
Close();
FreeLibrary(hInst);
在调用Open()方法时出错,原因是调用约定的问题:
解决方案:
在定义函数指针的时候加上 _stdcall 表示标准调用约定. 默认是c调用约定.
/*
功能:打开usb评价器虚拟串口,并与设备建立连接
返回值:成功:返回相应的串口句柄 >0
失败:返回 -1
*/
typedef long (_stdcall *PJQ_Open)();