ホームページ > バックエンド開発 > C++ > C# で Assembly.LoadFile() 以外に DLL からメソッドを動的にロードして使用するにはどうすればよいですか?

C# で Assembly.LoadFile() 以外に DLL からメソッドを動的にロードして使用するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-14 09:35:43
オリジナル
261 人が閲覧しました

How Can I Dynamically Load and Use Methods from a DLL in C# Beyond Assembly.LoadFile()?

C# での動的 DLL ロード

C# では、特にサードパーティのライブラリやランタイム構成を使用する場合、開発者はダイナミック リンク ライブラリ (DLL) を動的に読み込む必要があることがよくあります。この記事の目的は、Assembly.LoadFile() メソッドの使用の制限に関するよくある質問に対処し、リフレクションおよび動的オブジェクト ベースのソリューションを提供することです。

Assembly.LoadFile() の制限

質問で述べたように、Assembly.LoadFile() を使用すると DLL が正常にロードされ、クラス名などの情報を取得できるようになります。ただし、ロードされた DLL 内のメソッドを直接呼び出すことができない場合があります。

解決策としての反省

この制限を克服するために、開発者はリフレクションを使用して、実行時にメソッドと操作オブジェクトを動的に呼び出すことができます。これを行うには:

  1. クラスの Type オブジェクトを取得します: var type = DLL.GetExportedTypes().FirstOrDefault();

  2. クラスのインスタンスを作成します: var c = Activator.CreateInstance(type);

  3. InvokeMember() メソッドを使用してターゲット メソッドを呼び出します:

    <code class="language-csharp"> type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] { "Hello" });</code>
    ログイン後にコピー

.NET 4.0 の動的オブジェクト

.NET 4.0 以降をターゲットとするアプリケーションの場合、dynamic キーワードを使用すると、このプロセスをさらに簡素化できます。このアプローチを使用すると、型リフレクションを行わずにメンバーに直接アクセスできます:

<code class="language-csharp">dynamic c = Activator.CreateInstance(type);
c.Output("Hello");</code>
ログイン後にコピー

結論

要約すると、Assembly.LoadFile() では DLL をロードできますが、ロードされたモジュール内のメソッドを呼び出すにはリフレクション オブジェクトまたは動的オブジェクトが必要です。アプリケーションの要件に応じて、どちらの方法でも、C# での実行時に DLL を動的にロードして使用するための実行可能なソリューションが提供されます。

以上がC# で Assembly.LoadFile() 以外に DLL からメソッドを動的にロードして使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート