-1

更新:

谢谢大家的热心回复。似乎我有点困惑。变化是在基类中添加了一个新的成员函数。我刚刚意识到也许我确实需要重新编译依赖于导出此类的 dll 的所有内容,因为符号表中函数名称的地址发生了变化。请确认我是对还是错。

为此争论不休,

当某个基类中的成员函数发生变化时,我只重新编译了从该基类派生的所有类,并遇到了一些运行时错误。

在辩论的另一边,我被告知我应该重新编译所有“依赖”于这个基类的类。

  1. 我不确定这是否正确?因为我正在构建 DLL,而且我总是理解这个动态链接的想法是不要重新编译。

  2. 如果是真的,我还想知道这里是什么“依赖”?

这个问题可能被问得太笼统,如果我应该提供任何其他细节,请告诉我。真的需要了解编译和链接的东西。

谢谢!

4

1 回答 1

1

DLL 和类不能很好地协同工作。(在 DLL 中使用类很好,当您尝试导出它们时就会遇到问题。)

出于这个原因,组件/对象系统(例如 COM、ActiveX、CORBA)定义了一个将用户与实现分开的接口。如果 DLL 的公共 API 仅使用指向仅具有纯虚函数的类型的指针,则它在 DLL 和调用者之间没有共享布局。

如果您尝试与数据或内联函数共享类,您将具有紧密耦合,并且需要重新编译所有用户以进行最轻微的实现更改。

于 2012-04-23T03:38:07.750 回答