日期:2014-05-17  浏览次数:20556 次

C# 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
 char[] pucCHMsg = new char[4096];
 char[] pucPHMsg = new char[4096];
 int uiCHMsgLen=0;  //此处定义成变参更方便一些
 int uiPHMsgLen=0;
 //读卡
int srbm = Class1.SDT_ReadBaseMsg(Com, pucCHMsg,uiCHMsgLen,pucPHMsg,uiPHMsgLen,0);
运行到这边就报错了:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

但是在delphi中,pucCHMsg ,pucPHMsg是动态分配内存的
  pucCHMsg:PChar;
  pucPHMsg:PChar; 

GetMem(pucCHMsg, 1024);
GetMem(pucPHMsg, 1024);
iRet := SDT_ReadBaseMsg(Com,pucCHMsg,uiCHMsgLen,pucPHMsg, uiPHMsgLen,0);

在C#中应该如何定义pucCHMsg ,pucPHMsg,而不报错呢,求解啊

------解决方案--------------------
应该是API接口的问题。网上找工具帮忙检查你的.net声明是否正确。
------解决方案--------------------
那两个为0的***Len不对吧,应该是指定对应数组大小的吧。