Visual C++、Delphi或者VB等編程語言來編寫成的DLL檔,在編譯完成過以後,產生DLL檔已經是一個可以直接供計算機使用的二進製檔。 但用Visual C#編譯器生成的受管代碼(managed code)雖然也是二進位檔,但不是可以直接供電腦使用的原始代碼(機器語言代碼)。但用Visual C#編譯器生成的受管代碼(managed code)雖然也是二進製檔,但不是可以直接供計算機使用的原始代碼(機器語言代碼)。 他實質上是一種中間語言(IL)代碼,這種IL代碼要轉變成可以供電腦直接使用的原始代碼,就需要經過"下一代視窗服務"( Next Generation Windows Services,簡寫為NGWS ) runtime的即時編譯器(即J99v)進行編譯。他實質上是一種中間語言(IL)代碼,這種IL代碼要轉變成可以供計算機直接使用的原始代碼,就需要經過"下一代視窗服務"( Next Generation Windows Services,簡寫為NGWS ) runtime的即時編譯器(即J99v)進行編譯。
經過以上比較,我們可以看出,用Visual C#生成的DLL檔已經和以前的DLL檔有了本質上的區別。經過以上比較,我們可以看出,用Visual C#生成的DLL檔已經和以前的DLL文件有了本質上的區別。 用Visual C#生成的DLL檔在程式設計中更多的表現為一種類(Class)或者類庫(Class Library)。用Visual C#生成的DLL檔在程式設計中更多的表現為一種類(Class)或者類庫(Class Library)。 本文就試著通過一個具體程式的例子,按照下面步驟來具體介紹:本文就試著通過一個具體程式的例子,按照下面步驟來具體介紹:
(1).創建一個DLL源代碼。 (1).創建一個DLL源代碼。
(2).編譯此DLL源代碼,生成DLL檔。 (2).編譯此DLL源代碼,生成DLL檔。
(3).用此DLL來創建一個簡單的用戶端程式。 (3).用此DLL來創建一個簡單的客戶端程式。
一. 程式設計開發及運行環境 : 一.程式設計開發及運行環境 :
(1).微軟視窗2000專業版 (1).微軟視窗2000專業版
(2)..Net FrameWork SDK Beta 2 (2)..Net FrameWork SDK Beta 2
二. 創建一個DLL源代碼(dll.cs) 二.創建一個DLL源代碼(dll.cs)
由於用Visual C#創建的DLL,此DLL是不需要執行的介面,所以在DLL檔就沒有必要定義Main ( )函數,來作為應用程式執行的入口。由於用Visual C#創建的DLL,此DLL是不需要執行的介面,所以在DLL檔就沒有必要定義Main ( )函數,來作為應用程式執行的入口。 Dll.cs的根源程式代碼如下: Dll.cs的根源程式代碼如下:
Dll.cs:
namespace Dll
file://定義了名稱空間,在調用DLL的時候就要導入此名稱空間。 {
public class Show
file://定義了一個類,在程式中就要來繼承此類。 public class Show
file://定義了一個類,在程式中就要來繼承此類。 {
public string Messages ( ) public string Messages ( )
file://定義了一個方法,此方法的作用就是返回下面字串。 file://定義了一個方法,此方法的作用就是返回下面字串。 {
return "歡迎使用Visual C#做的DLL檔!" ; return "歡迎使用Visual C#做的DLL檔!" ;
}
}
}
通過此DLL的根源程式可以看出,此DLL表現為一個小型的類庫,這是因為在此DLL中封裝了名字叫DLL的名稱空間,在此名稱空間中又定義了一個Show類,在此類中有一個方法就是Messages。通過此DLL的根源程式可以看出,此DLL表現為一個小型的類庫,這是因為在此DLL中封裝了名字叫DLL的名稱空間,在此名稱空間中又定義了一個Show類,在此類中有一個方法就是Messages。 雖然定義的內容相對少了些,但卻相當完全。雖然定義的內容相對少了些,但卻相當完全。
三. 編譯此DLL源代碼,生成DLL檔 三.編譯此DLL源代碼,生成DLL檔
要把DLL源代碼編譯成DLL檔,就需要配置好編譯器Csc.exe的參數和開關。
我們知道編譯器Csc.exe可以把源代碼編譯成四種不同的檔,分別是控制應用程式、代碼庫、windows應用程式、模組程式。
編譯命令具體如下:編譯命令具體如下:
csc /target:exe myProj.cs // 創建一個myProj.exe控制程式
csc /target:winexe myProject.cs
file://創建一個myProj.exe的windows程式 csc /target:library myProject.cs
file://創建一個myProj.dll代碼庫 csc /target:module myProject.cs
file://創建一個myProj.dll模組對於如何配置編譯器Csc.exe的其他參數和開關,可以參考稍前發表的文章《如何用CSC.exe來編譯Visual C#的代碼檔》,在此篇文章裏面有比較詳細的介紹。
通過以下編譯命令可以得到mydll.dll文件:通過以下編譯命令可以得到mydll.dll文件:
Csc /r:system.dll /t:library /out:mydll.dll dll.cs
四. 用此DLL來創建一個簡單的用戶端程式(test.exe) 用此DLL來創建一個簡單的客戶端程式(test.exe)
通過以上的根源程式代碼可以看到生成的mydll.dll檔雖然是一個以DLL為副檔名,實際上是一個類庫,和我們經常用到的System.dll、System.Windows.Forms.dll等這些檔相似。通過以上的根源程式代碼可以看到生成的mydll.dll文件雖然是一個以DLL為擴展名,實際上是一個類庫,和我們經常用到的System.dll、System.Windows.Forms.dll等這些文件相似。 同樣用mydll.dll創建程式也和用以上這些類庫創建程式相類似。同樣用mydll.dll創建程式也和用以上這些類庫創建程式相類似。 就是第一步就是導入此名稱空間--Dll。就是第一步就是導入此名稱空間--Dll。 然後在去繼承裏面封裝好的類--Show,再調用類中定義好的方法--Messages。然後在去繼承裡面封裝好的類--Show,再調用類中定義好的方法--Messages。 下面就是按照以上的步驟,創建的用戶端的根源程式代碼( test.cs ) :下面就是按照以上的步驟,創建的客戶端的根源程式代碼( test.cs ) :
test.cs:
using Dll ; // 導入此名稱空間 using Dll ; //導入此名稱空間
using System ; using System ;
public class GetMessage public class GetMessage
{
public static void Main ( ) public static void Main ( )
{
Show hi = new Show ( ) ; // 繼承名稱空間中定義的Show類
Console.WriteLine ( hi.Messages ( ) ) ; // 調用此類中的方法
}
}
在把test.cs編譯成執行程式中,要在編譯命令中添加一個引用,就是引用mydll.dll文件。在把test.cs編譯成執行程式中,要在編譯命令中添加一個引用,就是引用mydll.dll文件。 具體的編譯命令如下:具體的編譯命令如下:
csc /r:mydll.dll /r:system.dll test.cs csc /r:mydll.dll /r:system.dll test.cs
編譯完成,就會生成test.exe。編譯完成,就會生成test.exe。