程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#創建和調用DLL代碼

C#創建和調用DLL代碼

編輯:關於C#
 

一、寫在前面
C# 語言是一種簡單但功能強大的編程語言,用於編寫企業應用程序。

C# 語言從C和 C++語言演化而來,在語句、表達式和運算符方面使用了許多 C++ 功能。

C# 語言在類型安全性、版本轉換、事件和垃圾回收等方面進行了相當大的改進和創新。

C# 語言提供對常用 API 樣式(如 .NET 框架、COM、自動化和 C 樣式 API 等)的訪問。

什麼是動態鏈接庫?DLL三個字母對於你來說一定很熟悉吧,它是Dynamic Link Library 的縮寫形式,動態鏈接庫 (DLL) 是作為共享函數庫的可執行文件。動態鏈接提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。函數的可執行代碼位於一個 DLL 中,該 DLL 包含一個或多個已被編譯、鏈接並與使用它們的進程分開存儲的函數。DLL 還有助於共享數據和資源。多個應用程序可同時訪問內存中單個 DLL 副本的內容。

和大多數程序員一樣,你一定很使用過DLL吧。也曾感受到它的帶給你程序設計和編碼上的好錯吧今天我想和大家探討一個主題:如何在C#創建和調用DLL(動態鏈接庫), 其實在很大意義上而講,DLL讓我更靈活的組織編寫我們的應用程序,作為軟件設計者,可一個根據它來達到很高的代碼重用效果。下面我來介紹一下在C#中如何創建和調用DLL。

 

二、准備工作

 

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

 

三、創建DLL

 

讓我們創建以下三個C#代碼文件:

1、 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;

}

}

}

 

2、 MyMaxCD.cs

using 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;

}

}

}

}需要注意的是:我們在制作這兩個文件的時候可以用Visual Studio.NET或者其他的文本編輯器,就算是記事本也可以。這兩個文件雖然不在同一個文件裡面,但是他們是屬於同一個namespace(名稱空間)這對以後我們使用這兩個方法提供了方便。當然他們也可以屬於不同的名稱空間,這是完全可以的,但只是在我們應用他們的時候就需要引用兩個不同的名稱空間,所以作者建議還是寫在一個名稱空間下面比較好。
接下來的任務是把這兩個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文件
OK!我們創建動態鏈接庫文件的任務完成了,現在是我們享受勞動成果的時候了,下面我將介紹如何使用我們所創建的動態鏈接庫文件。

四、 使用DLL

我們簡單寫一個小程序來測試一下我們剛才寫的兩個方法是否正確,好吧,跟我來:
MyClient.cs
using 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

 

七、小結

動態鏈接具有下列優點:

節省內存和減少交換操作。很多進程可以同時使用一個 DLL,在內存中共享該 DLL 的一個副本。相反,對於每個用靜態鏈接庫生成的應用程序,Windows 必須在內存中加載庫代碼的一個副本。
節省磁盤空間。許多應用程序可在磁盤上共享 DLL 的一個副本。相反,每個用靜態鏈接庫生成的應用程序均具有作為單獨的副本鏈接到其可執行圖像中的庫代碼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved