码迷,mamicode.com
首页 > 数据库 > 详细

C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。错误类型为:System.AccessViolationException。

时间:2015-12-18 20:31:52      阅读:559      评论:0      收藏:0      [点我收藏+]

标签:

C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。解决方案

报错 dll文件应该是C++写的。封装了之后供我的C#程序调用,结果就提示了错误:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。错误类型为:System.AccessViolationException。

解决办法 在C#中调用别人的DLL的时候有时候出现 尝试读取或写入受保护的内存 。这通常指示其他内存已损坏。

在传值的时候还是用指针,再在C#中做转换就好了。

[DllImport("APPLISTCC.dll")]
public static extern string TestFunc1(string param1);

string ret1 = TestFunc1("text");

 

//改成:

 

[DllImport("APPLISTCC.dll")]
public static extern IntPtr TestFunc1(IntPtr par1);

IntPtr ptrIn = Marshal.StringToHGlobalAnsi("text");
IntPtr ptrRet = TestFunc1(ptrIn);
string retlust = Marshal.PtrToStringAnsi(ptrRet);

 

 自己在程序里强制释放COM资源,调用Marshal.ReleaseComObject()方法将不再使用的对象释放掉

C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。错误类型为:System.AccessViolationException。

标签:

原文地址:http://www.cnblogs.com/lihuioooo/p/5057885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!