当前位置: 代码迷 >> C# >> c#调用c的动态链接库(vector的读A2L文件的动态链接库)出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。解决方法
  详细解决方案

c#调用c的动态链接库(vector的读A2L文件的动态链接库)出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。解决方法

热度:69   发布时间:2016-05-05 03:29:45.0
c#调用c的动态链接库(vector的读A2L文件的动态链接库)出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
本来是用c++调用动态链接库的,调用代码为   
  OpenDialog1->DefaultExt="a2l";
  OpenDialog1->Filter="a2l(*.a2l)|*.a2l";
  path=OpenDialog1->FileName;
  content->LoadFromFile(path);
  m_asap2_parse(path.c_str() ,FALSE,dirlist);
此时能够成功,m_asap2_parse定义为int asap2_parse(char *filename, BOOL only_a2ml, char *dirlist[]);
但是我现在用C#做时出现问题“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”我c#代码如下
 [DllImport("asap2prs.dll", EntryPoint = "asap2_parse", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
  public static extern int asap2_parse(string filename, bool only_a2ml,ref string[] dirlist);

  openFileDialog1.Title = "打开a2l文件";
  openFileDialog1.Filter = "A2L flie(*.a2l)|*.a2l";
  openFileDialog1.ShowDialog();
  string[] dir = { ".", "\\MySpecialDirForAmls",null };
    
  string path;
  path = openFileDialog1.FileName;
  asap2_parse( path,false, dir);
当运行到asap2_parse时就出现问题了,就指导啊~~昨天还以为问题解决了。。。
------解决思路----------------------
参数传递错误,用byte[]试试
  相关解决方案