2017-09-15 51 views
0

所以我很確定我的設計/設置有問題。但基本上在Visual Studio中,我想創建一個鬆散地包裝第三方代碼的.lib項目,該部分非常簡單。創建C++ .lib項目,消費者項目必須引用libs包括

然而,我發現當我在我的其他項目中使用lib(在這種情況下,一個dll,可能很容易成爲一個不同的proj等exe),dll項目抱怨它需要相同的包含目錄作爲lib項目。這似乎...沒有幫助。 我sorta得到爲什麼它顯示的消息,因爲我包括從我的庫頭,這反過來包括第三方包含文件...

有沒有更好的設計建議呢?或者在Visual Studio中鏈接2個項目的更好方法。

我的消費dll,確實有我的lib的include目錄引用,並且我添加了項目作爲參考,所以lib輸出也應該設置。

以幫助觀察

第三方代碼 - >我的包裝的lib - >我的DLL消費者。

它看起來好像我的消費者代碼應該包含相同的頭文件,我的包裝項目旨在抽象。

回答

0

我包括從我的lib頭,後者又包括第三方包括文件...

這就是問題所在,當然,它需要一個頭,如果你想包括該標題,無論是直接還是間接通過另一個標題。

你應該爲你的lib的用戶產生一個新的頭文件,它只包含你公開給用戶的函數,並且不包括任何其他函數或者你正在嘗試的內部函數的其他頭文件包。你的lib的用戶可以包含這個頭,它將包含他們需要的所有定義。

+0

我想我明白你的意思了,現在我只想着如何做到這一點,不包括第三方頭,在我的頭部,暴露給我的DLL的消費者。 – nagates

+1

@nagates,這是在h和cpp之間分割你的代碼的問題。 h應該只包含接口細節,cpp - 實現。這可能會有所幫助:https://stackoverflow.com/questions/843389/the-pimpl-idiom-in-practice – KonstantinL

+0

@KonstantinL,如果你把實現放在cpp文件中,那麼你的用戶是否創建了你的類型?您可以包含接口標頭,但消費者代碼如何知道更具體的類,它實現了接口(使用第三方代碼)。 – nagates