bik*_*mak 7 .net c# c++ interop marshalling
我试图以多种方式做到这一点,但没有一个是有效的.有人有一个正确的例子吗?我只想将wchar_t*值从函数移动到C#级别.
这并不像你想象的那么困难......是什么wchar_t*?这种类型通常代表什么价值?一个字符串.它等同于中LPWSTR定义的类型windows.h.
所以,你把它作为一种string类型编组.但是,由于它是一个out参数(或返回值),因此您需要在C#端使用StringBuilder该类,而不是string类型.
P/Invoke语法看起来像这样:
[DllImport("MyLib.dll")]
public static extern void MyFunction(StringBuilder str);
Run Code Online (Sandbox Code Playgroud)
要使用它,首先要声明具有StringBuiler适当容量的类的实例,然后调用该函数:
StringBuilder myString = new StringBuilder(255);
MyFunction(myString);
Run Code Online (Sandbox Code Playgroud)
请记住,非托管C++代码必须释放字符串以防止内存泄漏.它是唯一可以访问分配字符串的非托管内存区域的人.
| 归档时间: |
|
| 查看次数: |
16839 次 |
| 最近记录: |