概要
エクスポートDLL のベクトルや文字列などの複雑なオブジェクトを含むクラスでは、DLL インターフェイスの要件に関する懸念が生じます。この記事では問題を分析し、コンパイラの警告に対処しながらそのようなクラスをエクスポートするための解決策を検討します。
コンパイラの警告
std:: オブジェクトを含むクラスをエクスポートしようとすると、コンパイラは、DLL インターフェイスを必要とするメンバーについて警告を発行する場合があります。これらの警告は、DLL を使用するクライアントがエクスポートされたクラスのメソッドを利用できるかどうかをコンパイラが確認できないことを示しています。
前方宣言
これらの警告に対処する 1 つの方法は、次の方法を使用することです。 DLL_EXPORT による前方宣言。これにより警告が抑制される可能性がありますが、必要なメソッドは実際にはエクスポートされません。この問題を完全に解決するには、std:: オブジェクトを含むクラスをコンパイル単位で DLL_EXPORT としてマークする必要があります。
メンバーのアクセス可能性
エクスポートされたオブジェクトのすべてのメンバーではないクラスは DLL_EXPORT である必要があります。クライアントがアクセスできないプライベート メンバーは無視するか、警告を無効にすることができます。ただし、クライアントが対話する可能性のあるメンバーはメソッドをエクスポートする必要があります。
考えられる解決策
シナリオに応じて、いくつかのアプローチが検討できます。
前方宣言とインスタンス化
DLL_EXPORT を使用してテンプレート クラスを前方宣言すると、現在のコンパイル単位でインスタンス化が作成されます。ただし、これはテンプレートの特殊化にのみ適用され、明示的に DLL_EXPORT としてマークする必要がある具象クラスには適用されません。
以上がDLL から `std::` オブジェクトを含むクラスをエクスポートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。