如何将wchar_t *从C ++编组为C#作为out参数或返回值?

时间:2011-05-22 16:26:22

标签: c# .net c++ interop marshalling

我试图以多种方式做到这一点,但没有一个是有效的。有人有一个正确的例子吗?我只想将wchar_t*值从函数移动到C#级别。

1 个答案:

答案 0 :(得分:7)

这并不像你想象的那么困难......什么是wchar_t*?这种类型通常代表什么价值?一个字符串。它等同于LPWSTR中定义的windows.h类型。

因此,您将其编组为string类型。但是,由于它是out参数(或返回值),因此您需要在C#端使用StringBuilder class,而不是string类型。

P / Invoke语法如下所示:

[DllImport("MyLib.dll")]
public static extern void MyFunction(StringBuilder str);

要使用它,首先要声明具有适当容量的StringBuiler类的实例,然后调用该函数:

StringBuilder myString = new StringBuilder(255);
MyFunction(myString);

请记住,非托管C ++代码必须释放字符串以防止内存泄漏。它是唯一可以访问分配字符串的非托管内存区域的人。