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