我是一个恢复休眠开源项目的团队的一员。我做的第一件事就是修复软件以在 Windows 上使用 Visual C++ 构建。计划是在即将发布的版本中分发 MSVC 版本。
当前的 DLL 是使用__stdcall
调用约定构建的,原因我无法解释。没什么大不了的,除了它也是用 MinGW 构建的,MinGW 和 Visual C++ 不同意什么__stdcall
意思。有关详细信息,请参见此处,但基本上 MinGW 将名称弄乱,Function@n
而 MSVC 将其弄乱,例如_Function@n
. 这是一个很好的理由不在__stdcall
你的 DLL 中使用......
切换到__stdcall
对以前的维护者来说非常重要,以至于他们在切换到它时撞了一个主要版本号(因为它破坏了 ABI 兼容性),我不愿意再次撞到它以切换回__cdecl
.
基本上,我需要说服 MSVC 像 MinGW 那样装饰 DLL 中的符号,或者使用某种别名,或者只是更改名称。我不在乎哪个,因为套件中的其他软件可以很容易地重建以调用 DLL,但是需要 - 它是我担心的现有软件。
我怀疑我需要一个 .DEF 文件,但我不愿意手工制作。有几十个导出函数。
那么问题来了——是否有任何自动化或大部分自动化的方式来做到这一点?