std:: オブジェクトを含むクラスを DLL からエクスポートする
std::vectors や std::strings などのオブジェクトを含むクラスを DLL からエクスポートする場合DLL、「クラス」などの警告'std::map<_Kty,_Ty>'クラス「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_EXPORT を使用したテンプレート クラスの前方宣言は、現在のコンパイル単位内でのみインスタンス化を作成します。このアプローチは、テンプレート以外のクラスには不十分です。
以上がstd:: オブジェクトを含むクラスを DLL からエクスポートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。