凡夫俗子_ 2017-02-16 11:28 采纳率: 0%
浏览 1082
已结题

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

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

调用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条回答 默认 最新

  • dabocaiqq 2017-02-16 11:25
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services