ホームページ >バックエンド開発 >C++ >C# で実行時に DLL からメソッドをロードして呼び出すにはどうすればよいですか?

C# で実行時に DLL からメソッドをロードして呼び出すにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-14 10:00:00432ブラウズ

How Can I Load and Invoke Methods from DLLs at Runtime in C#?

C# 実行時に DLL メソッドを動的にロードして呼び出す方法の詳細な説明

C# アプリケーション開発では、関数を拡張するために外部ライブラリ (.DLL) を動的にロードすることが必要になることがよくあります。この記事では、実行時に DLL をロードする手順を詳細に説明し、ロード後に直接メソッドを呼び出すことができないという一般的な問題を解決します。

Assembly.LoadFile() を使用して DLL をロードします

Assembly.LoadFile() メソッドは、DLL をアプリケーション メモリにロードするために使用され、それによって DLL で定義されている型とメソッドにアクセスします。例:

<code class="language-csharp">var DLL = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll");</code>

この例では、DLL ファイルがメモリにロードされ、「DLL」という名前の変数に割り当てられます。

LoadFile() からメソッド呼び出しまで

DLL をロードした後の次のステップは、ターゲット クラスのインスタンスを作成し、そのメソッドを呼び出すことです。 C# は、メソッドを直接呼び出すために、コンパイル時にそのメソッドの存在を認識する必要があることに注意してください。クラスとメソッドがコンパイル時に不明な場合は、別のアプローチを採用する必要があります。

リフレクションを使用してメソッドを呼び出す

リフレクションにより、実行時にアセンブリの動的な検査と操作が可能になります。リフレクションを使用してメソッドを呼び出す手順は次のとおりです:

  1. 型の取得: GetExportedTypes() メソッドを使用して、DLL によってエクスポートされた型配列を取得します。
  2. インスタンスの作成: Activator.CreateInstance() メソッドを使用して、ターゲット クラスのインスタンスを作成します。
  3. メソッドの呼び出し: InvokeMember() メソッドを使用して、インスタンスのターゲット メソッドを呼び出します。
<code class="language-csharp">foreach(Type type in DLL.GetExportedTypes())
{
    var c = Activator.CreateInstance(type);
    type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] {@"Hello"});
}</code>

動的オブジェクトを使用したメソッドの呼び出し (.NET 4.0 以降のみ)

.NET 4.0 以降では、動的オブジェクトを使用してインスタンスのメソッドを動的に呼び出し、上記のプロセスを簡素化できます。

<code class="language-csharp">foreach(Type type in DLL.GetExportedTypes())
{
    dynamic c = Activator.CreateInstance(type);
    c.Output(@"Hello");
}</code>

上記のいずれかの方法を使用すると、実行時にロードされる DLL 内のメソッドを正常に呼び出し、C# アプリケーションの機能を拡張できます。

以上がC# で実行時に DLL からメソッドをロードして呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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