是否可以从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#。。。
谢谢。
您可能想尝试以下操作:
[DllImport("DLLTest.dll", CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.LPWStr)]
public static extern string GetErrorString(int errCode);
请参阅此处接受的答案:返回char*的C函数的PInvoke
简短版本:您必须将返回值封送为IntPtr,或者.NET运行时进行一些假设并尝试删除char指针指向的内存。如果运行时做出的假设是错误的,这可能会导致崩溃。