如何将 wchar_t* 从 C++ 封送到 C# 作为 out 参数或返回值
How do I marshal wchar_t* from C++ to C# as an out parameter or return value?
我尝试过用很多方法做到这一点,但没有一种奏效。有没有人对此有正确的例子?我只想将wchar_t*
值从函数移动到 C# 级别。
这并不像你想象的那么困难......什么是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++代码必须释放字符串以防止内存泄漏。它是唯一有权访问分配字符串的非托管内存区域。
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将Ref对象作为类成员
- 虚拟决赛作为安全
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 使用指向成员的指针将成员函数作为参数传递
- 我应该使用什么来代替void作为变体中的替代类型之一
- 何时提供默认参数作为模板参数
- 如何将 I->getType() 作为参数传递给 llvm 中的 CreateCall?
- C++使用数组作为多维数组,尽管将其初始化为带有指针的 1D
- C++匿名结构作为std::映射值
- C++:如何使函数只返回作为列表一部分的字符串
- 如何制作一个将函数作为参数的类方法
- 如何在C++中使用非静态成员函数作为回调函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 管理C++传递浮点 *OUT 作为参数
- 返回某些内容作为 out 参数的正确术语是什么?
- 字符串生成器作为out参数
- 使用使用C风格字符串作为OUT参数的WinAPI函数
- 如何将 wchar_t* 从 C++ 封送到 C# 作为 out 参数或返回值