決定要使用哪一個匯出方法
您可以匯出在兩個方式 .def 檔或 __declspec(dllexport) 關鍵字之一的函式。為了協助您決定哪個方式為您的 DLL 是好,請考慮下列問題:
您想要後匯出多個函式?
您可以重建的應用程式只使用,則應用程式會使用您的 DLL 您重建不為範例,可以由協力廠商所建立的應用程式?
使用 .def 檔的優缺點
匯出在 .def 檔中的函式對匯出序數的控制項。當您將匯出函式加入至您的 DLL 時,您會使用其他的匯出函式可以指派更高的序數值。這樣做時,使用隱含連結的應用程式不需要重新連結包含新函式的匯入程式庫。這是很方便的,如果您設計 DLL 供多個應用程式使用,因為您可以加入新的功能也可確保它繼續正常與已經與它的應用程式一起使用。例如,使用 .def 檔, MFC DLL 名稱。
對使用 .def 檔的另一個優點是您可以使用 NONAME 屬性來匯出函式。這在 DLL 的匯出表中將只序數。如果 DLL 有大量的匯出函式,請使用 NONAME 屬性可以降低 DLL 檔案的大小。如需如何撰寫模組定義陳述式的詳細資訊,請參閱 模組定義陳述式的規則。如需序數匯出的詳細資訊,請參閱 根據序數而不是名稱從 DLL 匯出函式。
使用 .def 檔的缺點是,則只會在 C++. C++ 檔中的函式,您在 .def 檔必須放置裝飾名稱或定義匯出的函式使用 extern 「C」避免由 Visual C++ 編譯器完成的名稱裝飾。
如果您將在這個 .def 的裝飾名稱檔案,您可以使用 /MAP 連結器選項,您可以取得它們使用 DUMPBIN 工具或。是由編譯器產生的裝飾名稱是編譯器特定的;因此,因此,如果您將由編譯器產生的到 .def 檔的裝飾名稱,應用程式也必須建立的 DLL 連結使用編譯器的相同版本,以便裝飾名稱出現在呼叫應用程式符合輸出名稱在 DLL 的 .def 檔。
使用 __declspec(dllexport) 的優缺點
使用 __declspec(dllexport) ,因為您不必擔心維護 .def 檔和取得匯出函式的裝飾名稱,會很方便。不過,如此一來用處匯出所連接的應用程式數目限制您願意重建。如果您重新建置新的匯出的 DLL,則必須重建應用程式,因為裝飾名稱輸出 C++ 函式可能會變更,如果您使用的編譯器版本不同重建。