如何将 wchar_t* 从 C++ 封送到 C# 作为 out 参数或返回值

本文关键字:作为 out 返回值 参数 C++ wchar | 更新日期: 2023-09-27 17:57:08

我尝试过用很多方法做到这一点,但没有一种奏效。有没有人对此有正确的例子?我只想将wchar_t*值从函数移动到 C# 级别。

如何将 wchar_t* 从 C++ 封送到 C# 作为 out 参数或返回值

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

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

P/Invoke 语法如下所示:

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

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

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

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