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#调用DLL时出现“托管的PInvoke签名与非托管的目标签名不匹配”的问题,并提供了两种解决方案:一是修改C#中的声明以匹配DLL的调用约定;二是确保DLL的导出函数使用正确的调用约定。文章还附带了__stdcall与_cdecl区别的参考资料。
1万+

被折叠的 条评论
为什么被折叠?



