2017-08-21 28 views
3

「TestDLL.h」 C++如何指定命名空間,高清文件

namespace atest 
{ 
    void HelloWorld(); 
} 

namespace btest 
{ 
    void HelloWorld(); 
} 

我試圖通過DEF文件導出的DLL函數。有兩個名稱相同的函數,但名稱空間不同。我寫的DEF文件是這樣的:

LIBRARY "TestDLL" 
EXPORTS 
    HelloWorld @1 

在Visual Studio顯示 「錯誤LNK2001:無法解析的外部符號的HelloWorld」。我找不到有關如何在def文件中指定命名空間的有用信息。我想知道如何解決這個問題。我會很感激你的幫助。

回答

3

定義文件必須包含裝飾名稱。 (即函數名的編譯器和鏈接看到他們)

您可以Microsoft's site讀了細節,但這裏的相關章節:

如果在一個C++文件導出功能,你必須將裝飾名稱放在.def文件中,或使用extern「C」用標準C鏈接定義導出的函數。如果你需要把修飾的名在DEF文件,你可以通過使用DUMPBIN工具或通過使用連接器/ MAP選項

就個人而言,我更喜歡使用/MAP獲得它們。我發現它比使用DUMPBIN的瑞士軍刀更直接。

僅供參考here是裝飾名稱文件的鏈接。

+0

在我的示例文件中,如何編寫def文件?你能爲我寫一個def文件演示嗎?這兩個命名空間在相同的DLL。我不知道如何處理它。 – Rhysol

+0

@Rhysol你需要使用/ MAP選項編譯DLL(或者在.obj文件中使用DUMPBIN,以便了解這些函數的編碼名稱,我們無法從這裏爲你做到這一點 – Frank

+0

謝謝,我會做一些關於/ MAP的研究 – Rhysol