2011-11-16 22 views
1

所以對於參數的緣故,我有一個名爲ExportedFunctions.cpp蒙山一對夫婦的裝飾與DLL_EXPORT功能模塊(見下文)如何阻止在MS VS C++中導出函數?

#define DLL_EXPORT __declspec(dllexport)

ExportedFuncitons.cpp包括LibraryFunctions.h。在該頭文件中聲明的函數在LibraryFunctions.lib中實現並靜態鏈接到我的項目。

問題是,當我編譯我的DLL並使用依賴walker(depends.exe)來查看它時,我不僅可以看到ExportedFunctions.cpp導出的函數,還可以看到LibraryFunctions.h中的所有函數。

就是這樣,即使我從LibraryFunctions.h中刪除了一些函數聲明。它們繼續顯示爲DLL入口點。我想隱藏它們。

+1

您是否嘗試過使用命名空間{}(即匿名命名空間)?雖然功能可能仍然可以導出,但不可能調用它們,因爲範圍解析永遠不會成功。 – moshbear

+2

是否有可能以調試模式構建庫和/或Dependency Walker是否正在提取調試符號,這將允許它顯示所有函數(不管是否導出)? –

回答

0

想通了。

問題是lib文件正在導出函數。無論.h文件在說什麼,它看起來都會導出。

幸運的是,我也是LibraryFunctions的所有者,所以我使用「Release-Static Lib」重新編譯它。在該配置中,我阻止了dllexport指令。