2009-10-13 35 views
0

好吧,我想將一些項目轉換成DLL。這些都是Visual Studio 2008項目,都是用C++編寫的。建立多個項目的DLL的正確方法?

我們有9個不同的項目(所有在Visual Studio 2008下的解決方案)。例如:

RasterTools\ 
RasterDataset.h 
RasterDataset.cpp 
Point.h 
Point.cpp 
<... insert like 50 more cpp files ...> 

CoreTools\ 
Image.h 
Image.cpp 
CoreUtilities.h 
CoreUtilities.cpp 
<... insert more ...> 

<... insert 7 or more projects ...> 

現在事情是某些項目使用其他項目的類。例如Image.h使用Point.h,CoreUtilities.h有一些處理Points的函數。當你有多個交織在一起的項目時,建立一個DLL的正確方法是什麼?

基本上我們要具備以下條件:

CoreTools.dll 
RasterTools.dll 
<other projects.dll> 

我知道如何處理__declspec(dllexport)的和dllimport的罰款,通過宏。但是,當我試圖構建例如CoreTools.dll我得到的鏈接器錯誤,我曾經使用過一個類或沒有包含在該項目中的功能。例如,當構建coreTools.dll時,我得到任何Point Class函數的鏈接器錯誤。

我該如何處理?

編輯

我想這一點,基本上我注意到,自循環依賴的結果幾乎所有的複選框被變灰。 :(

回答

3

如果在其拋出窗口的鏈接器錯誤,選擇項目右鍵單擊「項目依賴項...」,你會看到所有其他項目的列表中您的解決方案。

檢查框(DLL)項目旁邊,Visual Studio會自動鏈接到它(並確保依賴關係在客戶端之前建立)

2

對於您構建的每個DLL,您還應該構建一個LIB。 B(B.DLL)引用項目A(A.DLL)中的條目,然後Project A首先創建,它創建A.DLL和A.LIB,然後Project B可以將A.LIB添加到可選鏈接庫以解析其引用那麼依賴於B.DLL的C.DLL可以包括de在鏈接步驟B.LIB等等等等。

至少這是在非常低會發生什麼情況,建立/製作水平。如同leegent所暗示的那樣,如果你選擇了正確的項目依賴關係,開發環境可能爲你做所有這些工作。

1

如果你有你的DLL之間循環依賴,你必須只使用代碼從下面的水平在一定水平走動的東西,所以你得到分層的DLL,每個DLL來解決這些問題。