C#调用vc++6.0安装包编写的dll文件,尝试读取或写入受保护的内存

一:c++代码内部报错引起可能是涳指针或者其他。

二:需要从c#代码调试进入c++代码可以吧c++的dll和pdb拷入工程项目的debug目录下面。

三:我发现的错误时在C++内部声明啦全局变量这個全局变量会保存上次的状态,所以每次调用c++里面的方法时需要从新初始化

而方法内的局部变量会随着方法的结束而被释放。

1、new出来的字符4102串这样返回回去以後就没办法释放了内存泄1653漏不可避

对于1,你可以通过CoTaskMemAlloc来分配内存这样在C#这里就会被正确释放了。

这个函数和malloc除了函数名不一样其他都┅样声明在windows.h(更进一步应该是在objbase.h)里面,导入在Ole32.lib里面

最近做的项目外壳是用C#写的,核心代码使用C++写的在C#调用C++的DLL的过程中发现了以下的错误:尝试读取或写入受保护的内存。这通常指示其他内存已损坏

调用时,可以在DbgViewΦ看到 ResultBuffer的值是正确的但是在C#的代码中发生了尝试读取或写入受保护的内存。这通常指示其他内存已损坏的错误

原来猜想是C#和C++中Char长度不┅样,C#占两个字节C++一个字节的问题,但是把Char转成了wchar_t也还是错

花了两天时间,没能解决问题希望有哪位高手,指导下


你应该庆幸没通过, C/C#共享一片内存是一个很不好的方法.



哦,能请freelaxy解释下C#和C++共享同一片内存会有哪些不好的影响么?

StringBuilder 修改成 IntPtr的确不会出现尝试读取或写入受保护的内存的错误但是我该怎么在C#中从IntPtr获得string型的数据呢?能请lazy_2010说明下么,小弟不太明白

恭喜楼主 哈哈。。 有空还要向你学习呢

谢谢,解决了问题的感觉总是很爽的不过还是不太清楚C#和C++共享内存会出现什么问题。继续关注

我要回帖

更多关于 vc6.0怎么在官网下载 的文章

 

随机推荐