C#调用DLL中的函数出现“原因可能是托管的PInvoke签名与非托管的目标签名不匹配”,原因是DLL中声明的接口没有使用__stdcall声明。
有两种解决方式:
1. 改C#中的声明:如
[DllImport("winmm.dll", EntryPoint ="sndPlaySoundA",)]
为[DllImport("winmm.dll", EntryPoint ="sndPlaySoundA",CallingConvention = CallingConvention.Cdecl)]
2. DLL的导出函数前声明__stdcall。
至于__stdcall 和_cdecl 的区别,请参考如下网址:
http://blog.csdn.net/dengziliang001/article/details/17448789