C#调用C++的dll总是报错 Attempted to read or write protected memory.Attempted to read or write p……C#代码:[DllImport("duxie.dll",EntryPoint = "lala",CharSet = CharSet.None)]public static extern string lala();private void button1_Click(ob
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/27 10:31:22
![C#调用C++的dll总是报错 Attempted to read or write protected memory.Attempted to read or write p……C#代码:[DllImport(](/uploads/image/z/12779995-67-5.jpg?t=C%23%E8%B0%83%E7%94%A8C%2B%2B%E7%9A%84dll%E6%80%BB%E6%98%AF%E6%8A%A5%E9%94%99+Attempted+to+read+or+write+protected+memory.Attempted+to+read+or+write+p%E2%80%A6%E2%80%A6C%23%E4%BB%A3%E7%A0%81%EF%BC%9A%5BDllImport%28%22duxie.dll%22%2CEntryPoint+%3D+%22lala%22%2CCharSet+%3D+CharSet.None%29%5Dpublic+static+extern+string+lala%28%29%3Bprivate+void+button1_Click%28ob)
C#调用C++的dll总是报错 Attempted to read or write protected memory.Attempted to read or write p……C#代码:[DllImport("duxie.dll",EntryPoint = "lala",CharSet = CharSet.None)]public static extern string lala();private void button1_Click(ob
C#调用C++的dll总是报错 Attempted to read or write protected memory.Attempted to read or write p……
C#代码:
[DllImport("duxie.dll",EntryPoint = "lala",CharSet = CharSet.None)]
public static extern string lala();
private void button1_Click(object sender,RoutedEventArgs e)
{
string a = lala();//////////此处报错
}
错误为:Attempted to read or write protected memory.Attempted to read or write protected memory.
另外,dll本身的返回值是char*
我是新手,希望大家多多指教,最好详细一点,我会多加分的,
C#调用C++的dll总是报错 Attempted to read or write protected memory.Attempted to read or write p……C#代码:[DllImport("duxie.dll",EntryPoint = "lala",CharSet = CharSet.None)]public static extern string lala();private void button1_Click(ob
建议动态库不要返回字符串指针.而是在参数中传递.
基本上没有见过动态库中返回字符串指针的.看看所有WIN32的API,应该是没有的
返回字符串是在C++中产生的,而C#的GC机制会试图销毁这个字符串
估计这时就出现你说的这个错误了
作为引参传递时,参数内存是以C#分配的,所以GC机制可以自动回收它的内存.
解释的可能不是很好,很简单,这个错误的意思应该 是:C#不能读写C++产生的内存.
当然,肯定有别的方法可以读写.不在本问题中了.