【发布时间】:2019-01-19 12:01:49
【问题描述】:
我有一个旧的 c++ 库,所有方法都使用 pascal 调用约定导出, 据我所知,c# marshaller 不支持 pascal 调用约定, 我可以在 c# 端使用 stdcall 并以相反的顺序传递参数吗?
【问题讨论】:
我有一个旧的 c++ 库,所有方法都使用 pascal 调用约定导出, 据我所知,c# marshaller 不支持 pascal 调用约定, 我可以在 c# 端使用 stdcall 并以相反的顺序传递参数吗?
【问题讨论】:
pascal 是一个 16 位调用约定,在 32 位代码中它被替换为 __stdcall。保留标识符是为了源兼容性。 CallingConvention.StdCall 是 pinvoke 的默认设置,因此无需特别注意。
您可以在this post 中找到有关 DllImport.CallingConvention 的更多信息,其中提到了 pascal。
【讨论】: