原因可能是托管的PInvoke签名与非托管的目标签名不匹配

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

你可能感兴趣的:(C#)