作业帮 > 综合 > 作业

C#调用C++的dll报错 Attempted to read or write protected memory.Th

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/26 00:00:51
C#调用C++的dll报错 Attempted to read or write protected memory.This is.
之前用C++封装了一个DLL,后来开发了一个C#程序调用该DLL.
突然发现:
1:将DLL编译为“Use MFC in a Static Library”,就会出现题目报的错误
2:将DLL编译为“Use MFC in a Shared DLL“,就没有错误
谁知道是什么原因啊.是不是和函数有关系.
建议动态库不要返回字符串指针.而是在参数中传递.
基本上没有见过动态库中返回字符串指针的.看看所有WIN32的API,应该是没有的
返回字符串是在C++中产生的,而C#的GC机制会试图销毁这个字符串
估计这时就出现你说的这个错误了
作为引参传递时,参数内存是以C#分配的,所以GC机制可以自动回收它的内存.
解释的可能不是很好,很简单,这个错误的意思应该 是:C#不能读写C++产生的内存.
当然,肯定有别的方法可以读写.不在本问题中了.