I have tried to do this in many ways, but none is working. Does anyone have a correct example for this? I just want to move the wchar_t*
value from a function to the C# level.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
This isn't as difficult as you think it is... What is wchar_t*
? What value does that type typically represent? A string. It's the equivalent to the LPWSTR
type defined in windows.h
.
So, you marshal it as a string
type. However, since it's an out
parameter (or a return value), you'll need to use the StringBuilder
class on the C# end, rather than the string
type.
The P/Invoke syntax would look something like this:
[DllImport("MyLib.dll")]
public static extern void MyFunction(StringBuilder str);
And to use it, you first declare an instance of the StringBuiler
class with the appropriate capacity, and then call the function:
StringBuilder myString = new StringBuilder(255);
MyFunction(myString);
Remember that the unmanaged C++ code must free the string in order to prevent a memory leak. It's the only one with access to the unmanaged memory area where the string was allocated.