首頁 >後端開發 >C++ >如何從 DLL 匯出包含 `std::` 物件的類別?

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

Patricia Arquette
Patricia Arquette原創
2024-11-10 05:04:02902瀏覽

How to Export Classes Containing `std::` Objects from a DLL?

從DLL 匯出包含std:: 物件(向量、地圖等)的類別

簡介

匯出包含來自🎜>簡介

匯出包含來自🎜>簡介

匯出包含來自DLL 的向量和字串等複雜物件的類別引起了有關DLL 介面要求的擔憂。本文分析了這個問題,並探討了在解決編譯器警告的同時導出此類類別的解決方案。

編譯器警告

當嘗試匯出包含 std:: 物件的類別時,編譯器可能會發出有關需要 DLL 介面的成員的警告。這些警告表示編譯器無法確保導出類別的方法可供使用 DLL 的客戶端使用。

轉送聲明

解決這些警告的一種方法是使用使用 DLL_EXPORT 轉送宣告。雖然這可能會抑制警告,但它實際上並沒有導出所需的方法。要完全解決此問題,包含 std:: 物件的類別必須在其編譯單元中標記為 DLL_EXPORT。

成員可存取性

並非所有導出的成員類別需要是 DLL_EXPORT。客戶端無法存取的私有成員可以被忽略或停用其警告。但是,客戶端可能與之互動的成員必須導出其方法。

  • 可能的解決方案
  • 根據情況,可以考慮以下幾種方法:
  • 停用警告:
  • 停用警告:

停用警告:

禁用警告:對於不可導出的成員,可以停用警告以避免混亂。 DLL 匯出包裝器: 為需要匯出的成員建立 DLL 匯出包裝器函數或間接方法。 PIMPL 習慣用法: 利用PIMPL 慣用法減少外部可見的數量轉發聲明和實例化 >使用DLL_EXPORT 轉送聲明模板類別確實會在目前編譯單元中建立實例化。但是,這僅適用於模板特化,不適用於具體類,具體類別需要明確標記為 DLL_EXPORT。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn