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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值