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