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();
        }
    }
    

     

 

留言

這個網誌中的熱門文章

ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務

Oracle 例外控制(Exception Control)

Oracle 工作排程 DBMS_JOB 筆記