之前封装c++dll时总是出现”对 P/Invoke 函数的调用导致堆栈不对称。原因可能是托管的 P/Invoke 签名与非托管的目标签名不匹配”的问题,后来发现原来c/c++使用的是cdecl方式调用,而c#默认使用的是stdcall的方式来调用非托管代码,所以我们在调用native c++ dll的时候需要加上CallingConvention=CallingConvention.Cdecl来指定调用的方式。
我们也可以在c/c++的函数声明上加上__stdcall这一编译器关键字来使编译器按照stdcall方式来编译dll
https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.callingconvention.aspx
关于P/Invoke(1)
最新推荐文章于 2024-07-19 09:20:33 发布