C# 引用DLL的3種方式[靜態連結, 動態連結, 專案參考]
C# 引用DLL的3種方式
C#引用DLL的方式有
- 靜態連結(Static Linking)
- 動態連結(Dynamic Linking)
- 專案參考(Project Reference)
以下將說明運作原理、優/缺點...
靜態連結
- 運作原理, 靜態連結是將DLL編譯進應用程式的執行檔,使得應用程式與DLL的程式碼合併在一個執行檔中
- 優點: 執行速度較快,無需額外的DLL檔案
- 缺點: 更新DLL時,必須重新編譯應用程式
- 編譯時整合: DLL的程式碼在編譯時期被整合進入應用程式的執行檔
- 執行檔: 應用程式執行檔包含了所有必要的程式碼,無需額外的DLL檔案
- 應用範圍: 適用於相對較小且不經常更新的專案。若DLL需要更新,則必須重新編譯整個應用程式
- 部署方式: 部署時只需將單一執行檔複製到目標機器上,不需要額外的DLL
// 使用DllImportAttribute進行靜態連結 using System.Runtime.InteropServices; class Program { // 声明 DLL 文件的路径 const string dllPath = "YourDll.dll"; // 声明 DLL 中的函数 [DllImport(dllPath)] public static extern int YourFunction(); static void Main() { // 调用 DLL 中的函数 int result = YourFunction(); Console.WriteLine($"Result from DLL: {result}"); } }
動態連結
- 運作原理, 在執行時期,應用程式會動態載入DLL,並使用其功能, 使用 System.Reflection 或其他方法動態調用 DLL 中的函數
- 優點: 更新DLL不需要重新編譯應用程式
- 缺點: 需要確保DLL存在於執行目錄或系統路徑
- 編譯時整合: DLL的程式碼在編譯時期並未整合進應用程式,僅在執行時期動態載入
- 執行檔: 應用程式執行檔不包含DLL程式碼,需要確保DLL存在於執行目錄或系統路徑
- 應用範圍: 適用於需要彈性更新DLL的專案,更新時只需替換DLL檔案即可,不需重新編譯應用程式
- 部署方式: 部署時需要確保DLL與執行檔在同一目錄下,或者將DLL複製至系統路徑
class Program { static void Main() { // 動態載入 DLL Assembly assembly = Assembly.LoadFile("YourDll.dll"); // 根據 DLL 中的類別或函數名稱動態調用 Type type = assembly.GetType("YourNamespace.YourClass"); MethodInfo method = type.GetMethod("YourFunction"); // 創建類別的實例 object instance = Activator.CreateInstance(type); // 調用函數 int result = (int)method.Invoke(instance, null); Console.WriteLine($"Result from DLL: {result}"); } }
專案參考
- 運作原理, 在同一個解決方案中的專案之間建立參考關係,無需額外的DLL檔案
- 優點: 編譯時期就能夠進行錯誤檢查,易於管理
- 缺點: 若要在其他應用程式中使用,必須將整個專案一併複製
- 編譯時整合: 應用程式在編譯時期參考專案,但不將專案的程式碼整合進執行檔,而是動態連結
- 執行檔: 應用程式執行檔本身不包含DLL的程式碼,而是在執行時期需要使用
- 應用範圍: 適用於大型專案,易於管理,且在需要時能夠動態參考其他專案
- 部署方式: 部署時需要確保執行檔與所需的DLL檔案在同一目錄下,或者將所需DLL複製至系統路徑
// 在同一個解決方案中的專案中建立參考 // 在需要使用的地方直接使用命名空間和類別 using YourLibraryNamespace; class Program { static void Main() { YourClass.YourMethod(); } }
留言
張貼留言