标题:C#调用Delphi写的DLL,报“尝试读取或写入受保护的内存”错误,请各位朋友指 ...
只看楼主
iamjerry
Rank: 2
等 级:论坛游民
帖 子:10
专家分:20
注 册:2013-11-29
结帖率:0
已结贴  问题点数:10 回复次数:5 
C#调用Delphi写的DLL,报“尝试读取或写入受保护的内存”错误,请各位朋友指点!
我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这个函数正常。跪请各位大侠帮忙看一下,谢谢!
搜索更多相关主题的帖子: private public 朋友 
2013-12-23 18:56
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:5 
估计dll源码有问题吧

DO IT YOURSELF !
2013-12-24 08:23
iamjerry
Rank: 2
等 级:论坛游民
帖 子:10
专家分:20
注 册:2013-11-29
得分:0 
Dll源码没有任何问题,我把DLL中RWCom这个函数写成如下,也报同样的错误。
function RWCom(ComData: String; bAns: Boolean): String; stdcall;
begin
  Result := ComData;
end;
2013-12-24 08:51
iamjerry
Rank: 2
等 级:论坛游民
帖 子:10
专家分:20
注 册:2013-11-29
得分:0 
怎么没有朋友回呀,急呀!
2013-12-24 17:33
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
得分:5 
如果可以的话,请将你的dll贴上来我帮你看下。没有dll文件光凭猜测是不能解决问题的。

♂ 死后定当长眠,生前何须久睡。♀
2013-12-25 14:49
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:0 
我只想到两种情况 你可以试试
1  strReceivedData  类型换一下 例如char试试
2 我觉得可能是编译器中加入了对DEP的安全性检查,在编译完后的exe文件中取消NXCOMPAT位可解决该问题 editbin.exe /NXCOMPAT:NO myexe  

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2014-01-10 08:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-425599-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.093819 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved