如何在不需要使用lib文件重新链接exe的情况下更新C++ DLL?

Ric*_*ich 8 dll visual-c++

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

我想要做的是重建一个Vc ++ DLL并保持与已经链接到lib的exe的兼容性,而不必重建exe或使用LoadLibrary动态加载DLL.换句话说,有没有办法将类和方法添加到DLL(但不删除任何)并确保现有的入口点保持不变?

Mic*_*key 8

如果从使用DEF文件导出函数并手动指定序数,则应该能够完成此操作.

参考

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

  • 我想添加参考资料http://msdn.microsoft.com/en-us/library/900axts6(VS.80).aspx只需点击一下即可远离上述超链接并讨论使用def文件的原因和利弊. (5认同)

Pav*_*aev 8

这取决于您的EXE如何使用DLL中的类.添加新类不应影响现有入口点.然而,除此之外,以下任何内容都会影响对象大小和/或布局,因此会发生客户端更改(请注意,这在技术上是特定于VC的,但大多数适用于任何理智的实现):

  • 从类中删除字段(甚至是私有)
  • 向类添加新字段(甚至是私有)
  • 向现有类添加新基类
  • 从现有类中删除基类
  • 现有虚拟方法之前添加新虚拟方法(在现有虚拟方法之后添加新虚拟方法是可以的,除了下一点中描述的情况)
  • 在同一DLL中具有虚方法的另一个类中用作基类的类中添加新的虚方法
  • 更改现有字段的类型
  • 改变现有方法的签名
  • 使虚拟方法非虚拟,反之亦然