weixin_42494142 2019-03-23 09:42 采纳率: 0%
浏览 1007

c++调用DLL文件时报错存在未处理的异常,写入位置时发送访问冲突?

#include "stdafx.h"
#include<windows.h>
#include <iostream>

HINSTANCE readdll;

typedef bool(WINAPI *Read_Error)(char* MError, int Meter_No, int Dev_Port);
Read_Error Readerr = NULL;

int _tmain(int argc, _TCHAR* argv[])
{
    char* str = new char[65535];

    readdll = LoadLibrary(L"kpdev.dll");    //加载动态链接库

    if (readdll != NULL)
    {
        std::cout << "加载成功!\n";
        Readerr = Read_Error(GetProcAddress(readdll, "Error_Read"));
        if (Readerr(str,8,1))
        {
            std::cout << str;
        }
    }

    FreeLibrary(readdll); // 动态释放DLL

    return 0;
}

是一个校准台官方提供的dll库,需要读取台子上的误差数据,是用过串口读取的,使用的USB转232线, 串口使用的COM1, 不接USB转485线的时候,也就是不存在COM1是读取不到数据,但是没有报异常,接上USB转485线之后,报了一个异常,截图在下面

下面是报错截图

图片说明

下面是这个dll文件函数的官方说明

图片说明

下面是官方说明里面调用例程

//读误差 注意参数*cstrData 要分配空间,否则可能内存数据错误

void __fastcall TFrmMain::MMOprErrorReadClick(TObject *Sender)
{
  StatusBarMain->Panels->Items[0]->Text = "";
  bool tt = false;
  AnsiString strPort = ComboBoxPort->Text.SubString(4, ComboBoxPort->Text.Length()-3);

  char *cstrData = new char[20];
  memset(cstrData, 0, 20);
  boRes = Error_Read(&cstrData, 2, StrToIntDef(strPort, 2));
  if (tt)
    Edit1->Text = AnsiString(cstrData);
  else
    Edit1->Text = "ERROR";
  delete [] cstrData;
}

  • 写回答

2条回答 默认 最新

  • shanql 2019-03-23 10:34
    关注

    是不是跟运行库有关呢,你试试Release版下会不会呢

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?