How do I marshal wchar_t* from C++ to C# as an out parameter or return value?

前端 未结 1 1689
醉酒成梦
醉酒成梦 2020-12-10 07:08

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 t

相关标签:
1条回答
  • 2020-12-10 07:21

    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.

    0 讨论(0)
提交回复
热议问题