【跪求大神】一个关于C#调用C++开发的dll文件的故事。 5C

问题是这样的:调用报错:**尝试读取或写入受保护的内存。这通常指示其他内存已损坏。**

调用dll文件的代码是:
[DllImport("TCP102_SDK.dll", EntryPoint = "?TCP102_LedDisplay@@YGEPADEEPAUSTRUCT_LED_DISPLAY@@@Z")]
public unsafe static extern byte TCP102_LedDisplay(string ctr_ip, uint sequence, uint time_out, ref STRUCT_LED_DISPLAY led_dis);

dll里面的 TCP102_LedDisplay方法对应的代码是:
/******************************************************************************************************

  • Function Name : TCP102_LedDisplay
  • Description : LED 屏显示
  • Arguments : None.
  • Output : None.
  • Return : None.
  • Note(s) : None.
    *******************************************************************************************************/
    TCP102_SDK_API unsigned char __stdcall TCP102_LedDisplay(char *ctr_ip,unsigned char sequence,unsigned char time_out,STRUCT_LED_DISPLAY *led_dis)
    {
    unsigned char send_data[7+255];
    unsigned char rev_data[7];
    unsigned char result = 0;
    unsigned int dis_data_num=0;

    //检查参数
    if((led_dis==NULL)||(led_dis->DisData==NULL))
    {
    return TCP102_ERR_PARAMETER;
    }

    //显示时,最多为128个字节
    if(led_dis->DisDataLen>128)
    {
    return TCP102_ERR_PARAMETER;
    }

    //清零接收缓存数组
    memset(rev_data, 0, 7);

    //生成命令数据包
    MakePacket(send_data, sequence, TCP102_CMD_LED_DIS, led_dis->DisDataLen, led_dis->DisData);

    //向控制器发送命令数据包
    result = SendPacketToController(send_data,7+led_dis->DisDataLen, rev_data,7, ctr_ip,time_out);
    if(TCP102_ERR_OK!=result)
    {
    return result;
    }

    //如果命令发送成功,应答也接收成功,则对应答数据进行校验,并返回结果
    if((TCP102_ERR_OK == CheckPacket(rev_data,7))&&(rev_data[3]==(TCP102_CMD_LED_DIS|0x80)))
    {
    if( (rev_data[2]==0x00) )//控制器执行命令成功
    {
    return TCP102_ERR_OK;
    }
    else//控制器执行命令失败
    {
    return TCP102_ERR_CTR_EXE_CMD_FAIL;
    }
    }
    else//控制器返回的应答校验错误
    {
    return TCP102_ERR_ASK_CHECK;
    }
    }

我想要的结果就是第一张图片的里代码运行不报错,能正确运行。跪求大神帮忙啊!

2个回答

内存指针没有正确使用造成的修改下你的程序看看呢

u013047803
凡夫俗子_ 就是不知道怎样修改。。。有时间的话能说下具体怎么解决吗? 谢谢了
2 年多之前 回复

TCP102_LedDisplay ddl里面的函数无返回啊,你怎么还byte b=TCP102_LedDisplay?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!