上次我們說到的編譯成的dll檔案與cs檔案在同一目錄中,而不會放到虛擬目錄的bin目錄中,如何做才能夠把cs
檔案編譯成dll且自動放到虛擬目錄的bin檔案夾中呢?
開始-------程式-------Microsoft Visual Studio.NET 2003-------Visual Studio.NET工具,點擊其中的“Visual Studio.NET2003命令提示”,就會進入Microsoft Visual Studio.NET 2003命令提示視窗,然後我們用dos命令(cd)進入要編譯成dll的cs檔案所在的目錄,然後輸入命令:
csc /out: bin\index.dll /t:library index.cs
斷行符號,就會在bin目錄下產生與cs檔案同名的dll檔案
但是如果這個cs檔案引用了bin目錄下的另外一個dll檔案如comman.dll,則應該這樣輸入命令:
csc /out: bin\index.dll /r: bin\comman.dll /t:library index.cs
給出我自己的一個編譯執行個體:
首先進入Microsoft Visual Studio.NET 2003命令提示視窗,在命令列下切換到c盤下(我把MouseGridView.cs放在C盤下面)
執行
C:\>csc /out:MouseOver.dll /t:library MouseGridView.cs
在安裝了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!我們建立動態連結程式庫檔案的任務完成了,現在是我們享受勞動成果的時候了,下面我將介紹如何使用我們所建立的動態連結程式庫檔案。</font>
csc /target:library /out:F:\MyDLL.DLL D:\Home\MySwap.cs D:\Home\MyMaxCD.cs
動態連結具有下列優點:
節省記憶體和減少交換操作。很多進程可以同時使用一個 DLL,在記憶體中共用該 DLL 的一個副本。相反,對於每個用靜態連結庫產生的應用程式,Windows 必須在記憶體中載入庫代碼的一個副本。
節省磁碟空間。許多應用程式可在磁碟上共用 DLL 的一個副本。相反,每個用靜態連結庫產生的應用程式均具有作為單獨的副本連結到其可執行映像中的庫代碼。
升級到 DLL 更為容易。DLL 中的函數更改時,只要函數的參數和傳回值沒有更改,就不需重新編譯或重新連結使用它們的應用程式。相反,靜態連結的對象代碼要求在函數更改時重新連結應用程式。
提供售後支援。例如,可修改顯示器驅動程式 DLL 以支援當初交付應用程式時停用顯示器。
支援多語言程式。只要程式遵循函數的呼叫慣例,用不同程式設計語言編寫的程式就可以調用相同的 DLL 函數。程式與 DLL 函數在下列方面必須是相容的:函數期望其參數被推送到堆棧上的順序,是函數還是應用程式負責清理堆棧,以及寄存器中是否傳遞了任何參數。
提供了擴充 MFC 庫類的機制。可以從現有 MFC 類衍生類別,並將它們放到 MFC 擴充 DLL 中供 MFC 應用程式使用。
使國際版本的建立輕鬆完成。通過將資源放到 DLL 中,建立應用程式的國際版本變得容易得多。可將用於應用程式的每個語言版本的字串放到單獨的 DLL 資源檔中,並使不同的語言版本載入合適的資源。
使用 DLL 的一個潛在缺點是應用程式不是獨立的;它取決於是否存在單獨的 DLL 模組。