首頁 > 後端開發 > C++ > 主體

如何從 DLL 匯出包含 std:: 物件的類別?

Mary-Kate Olsen
發布: 2024-11-09 22:23:02
原創
659 人瀏覽過

How do You Export Classes Containing std:: Objects from a DLL?

從DLL 匯出包含std:: 物件的類別

嘗試從DLL 匯出包含std:: 物件(例如向量或字串)的類別時,您可能會遇到有關需要dll 介面的警告。當編譯器偵測到類別中複雜類型的成員未明確標記為 DLL 匯出時,會觸發此警告。

使用 DLL_EXPORT 轉送宣告成員類型可以部分解決該問題。然而,為了確保成員函數的正確導出,其編譯單元中的對應類別也必須標記為 DLL_EXPORT。

這個要求源自於編譯器無法確定客戶端使用了該類別的哪些方法DLL_EXPORTed 類別的。因此,它強制要求必須導出所有可訪問的方法。在這種情況下,不建議忽略警告並停用它。

要解決非dll 可匯出成員的警告,可以考慮以下方法:

  • 停用警告: 這適用於私有成員或客戶端無法存取的成員。
  • 建立包裝器或間接方法: 這涉及建立 DLL_EXPORT 包裝器方法或建立間接方法,有效地向客戶端隱藏內部實作。
  • 使用 PIMPL:此習慣用法有助於減少外部可見成員的數量,從而最大限度地減少問題。

在提供的範例,前向聲明模板專門化 std::allocator with DLL_EXPORT 在目前編譯單元內產生模板專門化的實例。這會在 DLL 中建立 std::allocator 的方法,包括它們的匯出。然而,這種方法不適合特定類,因為它只支援模板類的實例化。

以上是如何從 DLL 匯出包含 std:: 物件的類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板