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# は、メソッドを直接呼び出すために、コンパイル時にそのメソッドの存在を認識する必要があることに注意してください。クラスとメソッドがコンパイル時に不明な場合は、別のアプローチを採用する必要があります。
リフレクションを使用してメソッドを呼び出す
リフレクションにより、実行時にアセンブリの動的な検査と操作が可能になります。リフレクションを使用してメソッドを呼び出す手順は次のとおりです:
GetExportedTypes()
メソッドを使用して、DLL によってエクスポートされた型配列を取得します。 Activator.CreateInstance()
メソッドを使用して、ターゲット クラスのインスタンスを作成します。 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 サイトの他の関連記事を参照してください。