我正在尝试使用 System.Runtime.InteropServices 从 C# 应用程序调用现有的 C dll,并且无法匹配 PInvoke 函数和目标函数之间的签名。

目标函数是

__declspec(dllexport) DWORD GetSomeString(char* strOut);

我的 PInvoke 函数是
[DllImport("Existing.dll")]
public static extern uint GetSomeString([MarshalAs(UnmanagedType.LPWStr)]
                            string strDisplay);

我进行函数调用
string tempStr = "My Output String";
uint retVal = GetSomeString(tempStr);

但我收到消息



我还尝试将 PInvoke 函数实现为
[DllImport("Existing.dll")]
public static extern uint GetSomeString([MarshalAs(UnmanagedType.LPWStr)]
                            StringBuilder strDisplay);

但无济于事。

有没有人知道我可能做错了什么?

如果需要更多信息或我的问题不清楚,请告诉我。

提前致谢。

最佳答案

您需要指定 calling convention 。默认情况下,PInvoke 使用 StdCall ,但您的方法(可能)是 Cdecl

[DllImport("Existing.dll", CallingConvention=CallingConvention.Cdecl)]

关于c# - .Net c# 字符编码 *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12322572/

10-16 19:33