ホームページ > バックエンド開発 > C++ > C# コンソール アプリケーションで動的に読み込まれる DLL 内のメソッドにアクセスするにはどうすればよいですか?

C# コンソール アプリケーションで動的に読み込まれる DLL 内のメソッドにアクセスするにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-14 10:44:51
オリジナル
548 人が閲覧しました

How Can I Access Methods Within a Dynamically Loaded DLL in a C# Console Application?

C# での DLL の動的ロード

C# では、実行時に動的に DLL をロードして使用できます。 Assembly.LoadFile() メソッドを使用すると、DLL をアプリケーションにロードできます。

問題: コンソール アプリケーションでロードされた DLL のメソッドを使用できない

ユーザーは、DLL をロードできるが、そのメソッドにアクセスできないと報告しました。これは、C# コンパイラが DLL 内の型とメンバーを事前解決できないためです。 DLL 内のメソッドを呼び出すには、リフレクション オブジェクトまたは動的オブジェクトを使用する必要があります。

解決策 1: リフレクションを使用する

リフレクションを使用すると、型メタデータを取得し、実行時にそのメンバーを呼び出すことができます。リフレクションを使用するには、メソッドを明示的に呼び出す必要があります:

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

// 遍历 DLL 中导出的类型
foreach (Type type in assembly.GetExportedTypes())
{
    // 创建类型实例
    var instance = Activator.CreateInstance(type);

    // 调用方法 (假设方法名为 "Output" 并接受一个字符串参数)
    type.InvokeMember("Output", BindingFlags.InvokeMethod, null, instance, new object[] { "Hello" });
}</code>
ログイン後にコピー

解決策 2: 動的オブジェクトを使用する (.NET 4.0 以降)

動的オブジェクトを使用すると、明示的な型変換を行わずに、より単純な構文でコード内で DLL メソッドを呼び出すことができます。

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

// 遍历 DLL 中导出的类型
foreach (Type type in assembly.GetExportedTypes())
{
    // 创建动态实例
    dynamic instance = Activator.CreateInstance(type);

    // 调用方法 (假设方法名为 "Output" 并接受一个字符串参数)
    instance.Output("Hello");
}</code>
ログイン後にコピー

どちらのソリューションも、DLL 内のメソッドに動的にアクセスする方法を示しています。どの方法を選択するかは、.NET のバージョンと個人の好みによって異なります。リフレクションはより細かい制御を提供し、動的オブジェクトはコードを簡素化します。 @"C:visual studio 2012ProjectsConsoleApplication1ConsoleApplication1DLL.dll" は DLL への実際のパスに置き換える必要があることに注意してください。

以上がC# コンソール アプリケーションで動的に読み込まれる DLL 内のメソッドにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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