注册 登录
编程论坛 C# 论坛

C#调用Delphi写的DLL,报“尝试读取或写入受保护的内存”错误,请各位朋友指点!

iamjerry 发布于 2013-12-23 18:56, 3032 次点击
我C#程序里面调用我自己用Delphi写的DLL,调用InitReader这个函数正常,但调用RWCom这个函数后就报“尝试读取或写入受保护的内存”错误,请各位朋友指教!代码如下:
[DllImport("ExportMeter.dll")]
public static extern bool InitReader(string ComName, int Rate, int ParityBit, int iIntervalTimeout, int iDelay);
[DllImport("ExportMeter.dll")]
public static extern string RWCom(string ComData, bool bAns);

private string SendReceivedData(string strCmd, string strMsg, bool bBcc)
{
    string strReceivedData = "";
    string strReturnData = "";
    byte[] ASendData = GetSendByteArray(strCmd, strMsg, bBcc);
    string strSendData = pf.ByteArrayToHexString(ASendData, false);
    //向串口发送数据
    bool bRevDataOK = false;
    byte[] AReceivedData = null;
    if (ASendData[0] == 6) //发送数据后立即关闭串口更改波特率再打开串口接收数据
    {
        strReturnData = RWComUpdBaudrate(strSendData, SerialParam[0], int.Parse(SerialParam[0]), 2, 100, 3000);
        if (!strReturnData.Equals(""))
        {
            AReceivedData = pf.HexStringToByteArray(strReturnData);
            bRevDataOK = true;
         }
     }
     else
     {
         strReturnData = RWCom(strSendData, true);
         if (!strReturnData.Equals(""))
         {
             AReceivedData = pf.HexStringToByteArray(strReturnData);
             bRevDataOK = true;
         }
      }
      if (bRevDataOK) //读取数据成功
      {
          strReceivedData = Encoding.ASCII.GetString(AReceivedData);
          strReceivedData = strReceivedData.ToUpper();
          ShowReceiveData(strReceivedData);
      }
      return strReceivedData;
}
执行strReturnData = RWCom(strSendData, true);这行时就报“尝试读取或写入受保护的内存”错误
DLL中RWCom这个函数的定义是function RWCom(ComData: String; bAns: Boolean): String; stdcall;且这个函数没有任何问题,为何会报这个错,我都快疯了。调用InitReader这个函数正常。跪请各位大侠帮忙看一下,谢谢!
5 回复
#2
wp2319572013-12-24 08:23
估计dll源码有问题吧
#3
iamjerry2013-12-24 08:51
Dll源码没有任何问题,我把DLL中RWCom这个函数写成如下,也报同样的错误。
function RWCom(ComData: String; bAns: Boolean): String; stdcall;
begin
  Result := ComData;
end;
#4
iamjerry2013-12-24 17:33
怎么没有朋友回呀,急呀!
#5
3037709572013-12-25 14:49
如果可以的话,请将你的dll贴上来我帮你看下。没有dll文件光凭猜测是不能解决问题的。
#6
wangnannan2014-01-10 08:51
我只想到两种情况 你可以试试
1  strReceivedData  类型换一下 例如char试试
2 我觉得可能是编译器中加入了对DEP的安全性检查,在编译完后的exe文件中取消NXCOMPAT位可解决该问题 editbin.exe /NXCOMPAT:NO myexe  
1