c++和c#传递字符串问题

.Net技术 码拜 8年前 (2017-04-26) 3235次浏览
本人要把c++的一个dll中的字符串通过参数传递给c#主程序。
c++接口定义:

extern "C" __declspec(dllexport)bool __stdcall GetError(char** sErrorStr, ERROR_ENUM* nError);

其中sErrorStr就是本人要的字符串。
c#接口定义:

[DllImport(DllName)]
public extern static bool GetError(ref string sErrorStr, ref ERROR_ENUM nError);

但是调用此函数时程序崩溃,错误信息:尝试读取或写入受保护的内存。
是这两个接口转换定义有问题吗?

解决方案

10

引用:
Quote: 引用:

不需要ref,原因是字符串本来就是引用:


本人是要C++传递string给c#使用,不是c#发参数给c++。

C++里,字符串要占用内存的。
C++创建字符串,并传给C#,就会造成内存泄露(原因是C#不知道C++怎么样创建,也就不知道怎么样销毁)。
因此,通常的做法(甚至是C++互相调用的惯例),是
1、调用者(这里是C#)准备好一段内存缓冲区(这里是StringBuilder);
2、被调用者C++把字符串内容,填充到指定缓冲区去;
3、调用者从缓冲区能得到结果,也知道怎么样清理缓冲(C#本人会用垃圾回收),没有内存泄露问题。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c++和c#传递字符串问题
喜欢 (2)
[1034331897@qq.com]
分享 (0)