ホームページ >バックエンド開発 >C++ >DLL から C クラスを動的にロードする方法: 暗黙的リンクと動的ロード?

DLL から C クラスを動的にロードする方法: 暗黙的リンクと動的ロード?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 17:29:02467ブラウズ

How to Dynamically Load C   Classes from a DLL: Implicit Linking vs. Dynamic Loading?

DLL からの C クラスの動的ロード

DLL から C クラス全体をエクスポートすると、パブリック メソッドとプロパティの動的ロードが可能になります.

ヘッダーとライブラリを使用したコンパイル時リンク

コンパイル時リンクの場合は、クラス宣言内で標準の __declspec(dllexport) ディレクティブを使用します。これにより、クラス シンボルがコンパイラに公開されます。クラス宣言を含むヘッダー (.h) ファイルと、シンボル定義を含むライブラリ (.lib) ファイルを作成します。実行可能ファイルをリンクするときは、ヘッダーを含めてライブラリとリンクします。

実行時の動的ロード

クラスの動的ロードは、LoadLibrary() と GetProcAddress() で可能です。 。ただし、このアプローチは、遅延バインディングの問題のため、通常、クラスでは使用されません。

ファクトリ関数アプローチ

DLL のロード後にクラスに動的にリンクするには、アセンブラを利用するファクトリ関数を使用して、新しく作成されたオブジェクトを適切なオフセットに接続します。このメソッドにより、適切なクラス機能が保証されます。詳細については、提供されているリンクを参照してください。

遅延ロード DLL

遅延ロード DLL を使用すると、DLL を後でロードできます。このオプションには、必要に応じて DLL を動的にロードする EXE 内でのサンク関数の定義が含まれます。ただし、追加の構成が必要であり、パフォーマンスが低下する可能性があります。

プリプロセッサ マクロによる暗黙的リンク

暗黙的リンクには、DLL からのシンボルの参照と、リンカーによる解決が含まれます。彼ら。このアプローチは、アプリケーションの起動時に DLL がロードされる場合に適しています。ヘッダー ファイルでプリプロセッサ マクロ (_declspec(dllimport) など) を使用すると、エクスポートされたクラス シンボルがコンパイラに公開されます。

推奨事項

プリプロセッサ マクロとの暗黙的なリンクは、通常、 C クラスの動的ロードに推奨されます。効率的なシンボル解決と Visual Studio などの一般的な開発ツールとの互換性を提供します。

以上がDLL から C クラスを動的にロードする方法: 暗黙的リンクと動的ロード?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。