如何更新,而无需重新链接与库文件的exe一个C ++的dll?(How to update a C+

2019-07-31 03:51发布

首先,我指的是Windows环境和VC ++编译器。

我希望能够做的是重建一个VC DLL,并与已被链接到lib而无需重建exe文件或加载动态使用的LoadLibrary的dll一个exe保持兼容性。 换句话说,是有办法的类和方法添加到一个dll(但不删除任何),并确保现有的入口点保持不变?

Answer 1:

如果您使用DEF文件和手动指定序号导出功能,你应该能够做到这一点。

参考

http://msdn.microsoft.com/en-us/library/d91k01sh(VS.80).aspx



Answer 2:

这要看你的EXE从DLL使用的类。 添加新的类应该不会影响现有的入口点。 除此之外,然而,任何下面会影响对象的大小和/或布局,因此将是一个客户端的最新变化(注意,这在技术上是VC特有的,但其中大部分适用于任何理智的实现):

  • 从类中删除字段(甚至私人)
  • 添加新的字段(甚至私人)上课
  • 添加新的基类,以现有的类
  • 从已经存在的类中除去基类
  • 现有的虚拟方法之前加入新的虚拟方法(现有的后添加新的虚拟方法是好的,除了在下一个点所描述的情况)
  • 添加在一类新的虚拟方法,其在其中也有虚拟方法相同的DLL用作基类通过另一个类
  • 可更换式现有油田
  • 更改现有方法的签名
  • 制作一个虚拟方法的非虚拟的,且反之亦然


Answer 3:

只要你不添加任何导出的符号,该序号不会改变。 如果您通过标准DLLEXPORT机制增加出口的符号,那么这将是难以控制的。 如果您使用旧式.xpf符号文件你也许可以控制符号的次序在lib(虽然我不知道这是肯定的 - 它可能仍然重新排序是什么样子),但它的棘手做C ++符号这种方式。



Answer 4:

我认为,序很少被使用到了解决DLL进口 - 我认为你必须使用.DEF文件来获取连接使用它们。 所以只要你不改变的导出函数的名称或签名,该.exe应该只是罚款。



文章来源: How to update a C++ dll without needing to relink the exe with the lib file?