引用了一个封装好的dll(里面的内容无法修改),调用里面的方法运行,前两次没有问题,运行三次后会提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”。测试代码如下 :
[DllImport(@"C:\dxlapi.dll")]
private static extern bool apiInitLibrary(string s, string ss, string sss);
[DllImport(@"C:\dxlapi.dll")]
private static extern bool apiFinishLibrary();
private void button1_Click(object sender, EventArgs e)
{
apiInitLibrary(String.Empty, String.Empty, String.Empty);
apiFinishLibrary();
}
请问是什么原因,如何解决?
[DllImport(@"C:\dxlapi.dll")]
private static extern bool apiInitLibrary(string s, string ss, string sss);
[DllImport(@"C:\dxlapi.dll")]
private static extern bool apiFinishLibrary();
private void button1_Click(object sender, EventArgs e)
{
apiInitLibrary(String.Empty, String.Empty, String.Empty);
apiFinishLibrary();
}
请问是什么原因,如何解决?
引用DLL是这样么[DllImport(@"C:\dxlapi.dll")]
String str1 = "";
String str2 = "";
String str3 = "";apiInitLibrary(str1, str2, str3);
也就是说只有
[DllImport(@"C:\dxlapi.dll")]
private static extern bool apiFinishLibrary();
private void button1_Click(object sender, EventArgs e)
{
apiFinishLibrary();
}
这个方法同样运行三次之后会出现问题。
我觉得应该是内存分配的问题.但就是没有找到解决的办法
不要写两次!一次加载即可
看样子是字符串长度的问题。
我遇到过。
第一次执行apiInitLibrary(String.Empty, String.Empty, String.Empty);完成初始化。
第二次执行完毕后变量的相关内存被损坏。
第三次执行报告异常原因。楼主你确定一下apiInitLibrary能否被重复执行,有些初始化函数是只能执行一次的,执行多次可能会导致错误。
就是重复初始化的原因
结贴