【发布时间】:2013-02-26 05:33:16
【问题描述】:
我是一个恢复休眠开源项目的团队的一员。我做的第一件事就是修复软件以在 Windows 上使用 Visual C++ 构建。计划是在即将发布的版本中分发 MSVC 版本。
当前的 DLL 是使用 __stdcall 调用约定构建的,原因我无法解释。没什么大不了的,除了它也是用 MinGW 构建的,MinGW 和 Visual C++ 不同意 __stdcall 的含义。有关详细信息,请参阅here,但基本上 MinGW 会像 Function@n 一样破坏名称,而 MSVC 会像 _Function@n 一样破坏它。最好不要在 DLL 中使用 __stdcall...
切换到__stdcall 对以前的维护者来说非常重要,以至于他们在切换到它时撞了一个主要版本号(因为它破坏了 ABI 兼容性),我不愿意再次撞它以切换回 @987654328 @。
基本上,我需要说服 MSVC 像 MinGW 那样装饰 DLL 中的符号,或者使用某种别名,或者只是更改名称。我不在乎哪个,因为套件中的其他软件可以很容易地重新构建以调用 DLL,但是需要 - 这是我担心的现有软件。
我怀疑我需要一个 .DEF 文件,但我不愿意手工制作。有几十个导出函数。
那么问题来了 - 是否有任何自动化或大部分自动化的方法可以做到这一点?
【问题讨论】:
-
没有。只有 .def 文件可以重命名导出。创建导入库时,实际导出的名称应该无关紧要。
-
我就是这么想的。我正在尝试自动制作该 .DEF 文件,或者至少大部分是自动制作。我的问题是我正在尝试提供一个 DLL,该 DLL 将与已经链接到先前版本的导入库的现有代码一起使用。
-
所以将它与新的导入库链接。这是导入库的重点。
-
我正在尝试提供一个库,该库将与用户已经使用旧 DLL 的现有应用程序一起使用,并且我无法控制也无法更改。或者你是说我可以通过新的导入库以某种方式做到这一点?
标签: visual-c++ dll mingw dllexport