【发布时间】:2009-07-30 17:12:53
【问题描述】:
首先,我指的是Windows环境和VC++编译器。
我想要做的是重建 Vc++ dll 并保持与已链接到 lib 的 exe 的兼容性,而无需重建 exe 或使用 LoadLibrary 动态加载 dll。换句话说,有没有办法将类和方法添加到 dll(但不删除任何)并确保现有入口点保持不变?
【问题讨论】:
标签: dll visual-c++
首先,我指的是Windows环境和VC++编译器。
我想要做的是重建 Vc++ dll 并保持与已链接到 lib 的 exe 的兼容性,而无需重建 exe 或使用 LoadLibrary 动态加载 dll。换句话说,有没有办法将类和方法添加到 dll(但不删除任何)并确保现有入口点保持不变?
【问题讨论】:
标签: dll visual-c++
【讨论】:
这取决于您的 EXE 如何使用 DLL 中的类。添加新类不应影响现有入口点。然而,除此之外,以下任何内容都会影响对象大小和/或布局,因此将是一个破坏客户端的更改(请注意,这在技术上是特定于 VC 的,但其中大部分适用于任何理智的实现):
【讨论】:
只要不添加任何导出的符号,序号就不会改变。如果您通过标准的 dllexport 机制添加导出的符号,那么这将很难控制。如果您使用旧样式的 .xpf 符号文件,您可能能够控制 lib 中符号的顺序(尽管我不确定这一点 - 它可能仍会重新排序它们,但是它喜欢),但这很棘手以这种方式使用 C++ 符号。
【讨论】:
我认为序号不再用于解析 DLL 导入 - 我认为您必须使用 .def 文件才能让链接器使用它们。因此,只要您不更改导出函数的名称或签名,.exe 应该可以正常工作。
【讨论】: