我正在尝试使用 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/