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

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

Linda Hamilton
Linda Hamilton原創
2024-11-16 18:52:03590瀏覽

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

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

從DLL 匯出包含std::vectors 和std::strings 等物件的類別時DLL、警告,例如“class 'std::map<_kty>'需要“FontManager”類別的客戶端使用dll 介面”,可能會出現。此警告表示該類別的成員類型需要 DLL 介面才能由客戶端程式碼存取。

標準容器的轉送宣告

要解決此問題,請轉送帶有DLL_EXPORT 的類別宣告可以放在成員變數之前,如下所示:

template class DLL_EXPORT std::allocator<tCharGlyphProviderRef>;
template class DLL_EXPORT std::vector<tCharGlyphProviderRef,std::allocator<tCharGlyphProviderRef> >;
std::vector<tCharGlyphProviderRef> m_glyphProviders;

雖然這種方法可能會刪除警告,它不保證成員函數的DLL 介面的可用性。

DLL 介面要求

為了確保正確的 DLL 功能,類別及其成員函數必須具有DLL 介面。這意味著編譯器在 DLL 本身內產生函數,使其可導入。如果未能為客戶端程式碼可存取的成員提供此接口,將導致在編譯或連結期間出現警告或錯誤。

私有成員和警告

客戶端無法存取私有成員可以免除 DLL_EXPORT 宣告。可以停用對此類成員的警告。但是,應謹慎對待編譯器產生的析構函數和建構函式。

Dll 可匯出成員處理

客戶端必須使用的成員需要:

  • Dll 匯出包裝器:
  • Dll 匯出包裝器:
  • Dll 匯出包裝器:
  • Dll 匯出包裝器:

Dll 匯出包裝器: 建立從對成員執行操作的DLL 匯出的代理程式。

間接方法:

實作為成員提供間接存取的方法,並匯出這些方法。 PIMPL 慣用法: 使用私有實作(PIMPL) 慣用法來降低外部可見性模板類別的實例化使用DLL_EXPORT 的模板類別的前向聲明僅在目前編譯單元內建立實例化。這種方法對於非模板類別來說是不夠的。

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

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