Run-Time Check Failure #0

关于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)();

 

 

 

你可能感兴趣的:(check)