利用C#建立和調用DLL

來源:互聯網
上載者:User
【摘 要】很多進程可以同時使用一個DLL,在記憶體中共用該DLL的一個副本。相反,對於每個用靜態連結庫產生的應用程式,Windows 必須在記憶體中載入庫代碼的一個副本。
C# 語言從C和 C++語言演化而來,在語句、運算式和運算子方面使用了許多 C++ 功能。C# 語言在型別安全、版本轉換、事件和記憶體回收等方面進行了相當大的改進和創新。C# 語言提供對常用 API 樣式(如 .NET 架構、COM、自動化和 C 樣式 API 等)的訪問。

什麼是動態連結程式庫?DLL三個字母是Dynamic Link Library的縮寫形式,動態連結程式庫 (DLL) 是作為共用函數庫的可執行檔。動態連結提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。函數的可執行代碼位於一個DLL中,該DLL包含一個或多個已被編譯、連結並與使用它們的進程分開儲存的函數。DLL還有助於共用資料和資源,多個應用程式可同時訪問記憶體中單個DLL副本的內容。

首先對接下來要做的事情做個簡單的介紹,本文將利用C#語言建立一個名為MyDLL.DLL的動態連結程式庫,在這個動態連結程式庫檔案中將提供兩個功能一個是對兩個參數交換他們的值,另一個功能是求兩個參數的最大公約數。然後建立一個應用程式使用這個DLL,運行並輸出結果。

建立以下三個C#代碼檔案:

MySwap.cs using System;
namespace MyMethods
{
  public class SwapClass
  {
    public static bool Swap(ref long i,ref long j)
    {
      i = i+j;
      j = i-j;
      i = i-j;
      return true;
    }
  }
}

MyMaxCD.csusing System;

namespace MyMethods
{
    public class MaxCDClass
     {
        public static long MaxCD(long i, long j)
        {
            long a,b,temp;
            if(i>j)
            {
                a = i;
                b = j;
            }else
            {
                b = i;
                a = j;
            }
            temp = a % b;
            while(temp!=0)
            {
                a = b;
                b = temp;
                temp = a % b;
            }
            return b;
        }
    }
}

接下來的把這兩個cs檔案變成需要的DLL檔案。
安裝了Microsoft.NET Framework的作業系統上,在Windows所在目錄下找到Microsoft.NET目錄。這個目錄下面提供了C#的編譯器CSC.EXE,運行:csc /target:library /out:MyDLL.DLL MySwap.cs MyMaxCD.cs完成後可在本目錄下面找到剛才產生的MyDLL.DLL檔案。
/target:library 編譯器選項通知編譯器輸出DLL檔案而不是EXE檔案。後跟檔案名稱的 /out 編譯器選項用於指定DLL檔案名稱。
如果/out後面不跟檔案名稱編譯器使用第一個檔案 (MySwap.cs) 作為DLL檔案名稱。產生的檔案為MySwap.DLL檔案。簡單寫一個小程式來測試一下我們剛才寫的兩個方法是否正確:MyClient.csusing System;
using MyMethods;//這裡引用定義的名稱空間
class MyClient
{
    public static void Main(string[] args)
    {
        if (args.Length != 2)
        {
            Console.WriteLine("Usage: MyClient <num1> <num2>");
            return;
        }
        long num1 = long.Parse(args[0]);
        long num2 = long.Parse(args[1]);
        SwapClass.Swap(ref num1, ref num2);
        //請注意,檔案開頭的using指令使得以在編譯時間使用未限定的類名來引用DLL方法

        Console.WriteLine("The result of swap is num1 = {0} and num2 ={1}", num1, num2);
        long maxcd = MaxCDClass.MaxCD(num1, num2);
        Console.WriteLine("The MaxCD of {0} and {1} is {2}", num1, num2, maxcd);
    }
}

若要產生可執行檔 MyClient.exe,請使用以下命令列:csc /out:MyClient.exe /reference:MyLibrary.DLL MyClient.cs/out 編譯器選項通知編譯器輸出 EXE 檔案並且指定輸出檔案名 (MyClient.exe)。/reference 編譯器選項指定該程式所引用的DLL檔案。若要運行程式,請輸入 EXE 檔案的名稱,檔案名稱的後面跟兩個數字,例如:MyClient 123 456輸出結果為:The result of swap is num1 = 456 and num2 = 123
The MaxCD of 456 and 123 is 3

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.