【发布时间】:2015-04-29 18:20:17
【问题描述】:
我已经在 Windows VS2012 (.lib) 上构建了一个静态库,使用 stdcall 约定编译。当我说“已经构建”时,我的意思是很遗憾我无法使用我选择的调用约定来重建它。
是否可以从使用 cdecl 约定编译的代码中调用该库中的函数?或者至少做某种包装?
我不确定这是否可能(在浏览了 SO 之后,我实际上几乎确信这是完全不可能的)但有些人 here 含糊地提到可能有一个 kludge。有什么想法吗?
【问题讨论】:
-
编辑库的 .h 文件并将 __stdcall 放入函数原型中。将您的更改发回给图书馆所有者,这样您只需执行一次。
-
也许我不清楚:库的函数已经在头文件中有 __stdcall 限定符,并用它编译。我希望从另一个模块(我的)中的 __cdecl 函数调用它们。
-
那你只有一个想象的问题。
-
没有。我会更具体地说:我想在我自己的项目中重用一些第三方库(即 Nvidia 的 OpenCL 库的实现 - 在驱动程序中找到)。唉,这些库是使用 stdcall 约定构建的,因此不适用于我的 cdecl 项目。
-
那么肯定是工具问题——现代编译器编译调用stdcall函数的cdecl函数没有问题,反之亦然。
标签: visual-studio-2012 stdcall cdecl