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
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/25 18:39:16
![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](/uploads/image/z/12779996-68-6.jpg?t=C%23%E8%B0%83%E7%94%A8C%2B%2B%E7%9A%84dll%E6%8A%A5%E9%94%99+Attempted+to+read+or+write+protected+memory.This+is.%E4%B9%8B%E5%89%8D%E7%94%A8C%2B%2B%E5%B0%81%E8%A3%85%E4%BA%86%E4%B8%80%E4%B8%AADLL%2C%E5%90%8E%E6%9D%A5%E5%BC%80%E5%8F%91%E4%BA%86%E4%B8%80%E4%B8%AAC%23%E7%A8%8B%E5%BA%8F%E8%B0%83%E7%94%A8%E8%AF%A5DLL.%E7%AA%81%E7%84%B6%E5%8F%91%E7%8E%B0%EF%BC%9A1%EF%BC%9A%E5%B0%86DLL%E7%BC%96%E8%AF%91%E4%B8%BA%E2%80%9CUse+MFC+in+a+Static+Library%E2%80%9D%2C%E5%B0%B1%E4%BC%9A%E5%87%BA%E7%8E%B0%E9%A2%98%E7%9B%AE%E6%8A%A5%E7%9A%84%E9%94%99%E8%AF%AF2)
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
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“,就没有错误
谁知道是什么原因啊.是不是和函数有关系.
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
建议动态库不要返回字符串指针.而是在参数中传递.
基本上没有见过动态库中返回字符串指针的.看看所有WIN32的API,应该是没有的
返回字符串是在C++中产生的,而C#的GC机制会试图销毁这个字符串
估计这时就出现你说的这个错误了
作为引参传递时,参数内存是以C#分配的,所以GC机制可以自动回收它的内存.
解释的可能不是很好,很简单,这个错误的意思应该 是:C#不能读写C++产生的内存.
当然,肯定有别的方法可以读写.不在本问题中了.