EXE和DLL依赖 - 何时重新编译EXE?

时间:2010-10-25 06:08:15

标签: c++ visual-c++

我在exe和dll中有以下类定义。

// A.exe: 
Class A { void fun() { B* b = new B(); b.funx(); }

// B.dll:
Class B { void funx (void) { C* y = new C(); y.funy(); }
Class C { void funy() { } }

让我说我改变了B类的大小,我应该重新编译A.exe吗?我是否应该重新编译A.exe,即使我改变了C类的大小?

2 个答案:

答案 0 :(得分:2)

如果更改B类的大小,则应重新编译

如果通过更改C类的大小不改变B的大小,则无需重新编译A.

看来,B不是从C继承的,所以B的大小不会改变。

- 干杯

答案 1 :(得分:2)

每次b.dll的 public 界面发生变化时,你都必须重新编译a.exe(不仅是大小,也是成员重新排序时,私有/公共更改[这也会影响成员排序,没有从源代码中看到],...)。如果C是公共接口的一部分,那么每次whhn C更改时都需要重新编译A.exe。如果C是b.dll的私有类,则无需重新编译a.exe,该文件无法从a.exe引用。另请注意,C可以间接引用,例如当您的B::funx是内联函数时,从那时起C的实例化可以在A.exe的代码中进行。

作为一个大拇指,当您使用声明C替换class C;的定义,并且仍然可以编译A.exe时,您不需要关心C 。但我宁愿建议每次编译A.exe,因为在将来某个时候代码会发生变化,这样就不会满足这个条件,你将很难调试错误。