2010-10-25 68 views
0

我在exe和dll中有以下類定義。EXE和DLL依賴關係 - 何時重新編譯EXE?

// 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

你有充分的時間來A.EXE重新編譯公共接口的B.DLL變化(不僅大小,也當成員重新排序,私有/公共變化[這也影響成員排序,而不能從源代碼中看到],...)。如果C是公共接口的一部分,則每次更改時都需要重新編譯A.exe。如果C是b.dll的私有類,則無需重新編譯a.exe,而無法從a.exe引用它。還要注意,可以間接引用C,例如,當B::funx是內聯函數時,因爲C的實例化可以在A.exe的代碼中進行。

作爲一個大拇指之後,當您將C的定義替換爲聲明class C;,並且仍然可以編譯A.exe時,您無需關心C。但我寧願建議每次編譯A.exe,因爲在將來的某個時刻代碼會發生變化,所以這種情況不會得到滿足,您將很難調試錯誤。

2

如果你改變B類

如果B的大小不會改變由C級的尺寸發生變化,你需要的大小,您應該重新編譯不重新編譯A.

看來, B不是從C繼承的,所以B的大小不會改變。

--Cheers