是否可以从C++DLL向C#应用程序返回LPWSTR

本文关键字:应用程序 返回 LPWSTR C++DLL 是否 | 更新日期: 2023-09-27 18:26:30

C++函数的定义就是这个

__declspec(dllexport) LPWSTR __stdcall GetErrorString(int errCode);

我用C#称之为

 [DllImport("DLLTest.dll")]
 public static extern string GetErrorString(int errCode);
 static void Main(string[] args)
{
    string result = GetErrorString(5);
}

我得到一个类型为System.Runtime.InteropServices.SHEException 的未处理异常

我甚至不确定C++DLL是否可以尝试将LPWSTR返回到C#。。。

谢谢。

是否可以从C++DLL向C#应用程序返回LPWSTR

您可能想尝试以下操作:

[DllImport("DLLTest.dll", CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.LPWStr)]
public static extern string GetErrorString(int errCode);

请参阅此处接受的答案:返回char*的C函数的PInvoke

简短版本:您必须将返回值封送为IntPtr,或者.NET运行时进行一些假设并尝试删除char指针指向的内存。如果运行时做出的假设是错误的,这可能会导致崩溃。