2015-06-11 45 views
0

我們的團隊正在考慮從def文件移動到__declspec(dllexport)宏,因爲它必須在*.def文件中使用mangling名稱,這是一項繁瑣的任務來維護這些醜陋的任務看那裏的名字。但是我們仍然懷疑使用* .def文件而不是使用__declspec(dllexport)宏進行函數導出會有什麼好處。.def文件與__declspec(dllexport)宏

感謝您的建議!

回答

-1

.def文件可以通過序號值(@ 1,@ 2,...)而不是按名稱導出。這可以:

  1. 增加符號查找性能
  2. 保持與已經發布的DLL向後兼容性 ,即序 號碼爲舊的API添加新API時,都完好無損。

它可以避免修飾函數名,從而提高編譯器兼容性(即調用__stdcall和__cdecl的約定差異)。 這是在dll中導出未裝飾名稱的an example

1

根據MSDN: https://msdn.microsoft.com/en-us/library/hyx1zcd3.aspx,有四種方法導出的定義,在推薦的順序列出:在源代碼中

  • 一個輸出語句在

    1. 的__declspec(dllexport)關鍵字。 DEF文件
    2. 的/導出規格在LINK命令
    3. 在源代碼中的註釋指令形式的#pragma
    4. 評論的,(LI北部重點經濟區, 「/導出:definition」)

    的.DEF文件的優點如下:

    1. 您可以通過序

    出口的.DEF文件的缺點是, :

    1. 您有一個額外的文件,以保持
    2. 您必須使用裝飾函數名稱

    按序輸出的優點是您可以減小輸出表的大小。然而,那麼你必須使用序號而不是友好的名字。

  • 相關問題