首頁 >後端開發 >C++ >如何在 C# 控制台應用程式中存取動態載入的 DLL 中的方法?

如何在 C# 控制台應用程式中存取動態載入的 DLL 中的方法?

Barbara Streisand
Barbara Streisand原創
2025-01-14 10:44:51549瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn