我創建了一個函數庫,我想從中創建一個DLL並創建一個導出庫。創建DLL不是問題。將頭文件編譯爲DLL
問題是,我不希望開發人員/用戶查看頭文件的內部,因爲代碼沒有優化,並且即使它有效,它的一些看起來也是一團糟。
有無論如何我可以在另一個DLL中包含頭文件的內容,以便頭文件將被隱藏或有辦法將頭文件編譯爲二進制文件?
Win32,visual studio 2010,'c/C++'。
我創建了一個函數庫,我想從中創建一個DLL並創建一個導出庫。創建DLL不是問題。將頭文件編譯爲DLL
問題是,我不希望開發人員/用戶查看頭文件的內部,因爲代碼沒有優化,並且即使它有效,它的一些看起來也是一團糟。
有無論如何我可以在另一個DLL中包含頭文件的內容,以便頭文件將被隱藏或有辦法將頭文件編譯爲二進制文件?
Win32,visual studio 2010,'c/C++'。
首先,從標題刪除代碼:只需要聲明的功能,並指定類(即沒有在那裏代碼):
//header
void my_ignomous_function(int);
class my_ignomous_class {
public:
my_ignomous_class();
~my_ignomous_class();
bool my_ignomous_member(my_ignomous_class &x);
private:
// unfortunately, you have to give these details.
};
如果這還不夠,你可以使用pimpl idiom:在你的類使用指向用於實現的對象的指針。優點是你可以在頭文件中聲明實現類而不用任何細節。細節僅在實施中需要。
//header
class my_nice_class {
public:
my_nice_class()
~my_nice_class()
bool my_nice_member(my_nice_class &x);
private:
class my_horrible_secret_class *impl;
};
的另一種方法是fune調整您的設計,讓你已經不再隱瞞什麼;-)
是的,這很可怕,謝謝! –
額外的道具,如果我可以投票兩次來演示pImpl,但我會彈出pimpl(snerk)到unique_ptr中,以獲得您從三規則規則中獲得的額外溫暖和模糊的感覺。 – user4581301
我建議不要從DLL中導出C++實現。遵守CRT所施加的限制已經很困難(請參閱[在DLL邊界傳遞CRT對象的潛在錯誤](https://msdn.microsoft.com/zh-cn/library/ms235460.aspx))。添加不可見的代碼路徑(例如通過傳遞freestore支持的容器引用或拋出異常對象)不會改善這種情況。 – IInspectable
如何移動你的醜惡實現了頭文件和你的DLL。 – WhozCraig
我同意WhozCraig。頭文件定義了允許C/C++應用程序在DLL中創建的函數。所以你必須給開發者頭文件。如果那裏有東西你不希望它們看到,並且它不影響它們使用DLL的能力,那麼將它從頭文件中取出,它可能不在那裏。 –
呃,DLL是你編譯你的源代碼的二進制文件 –