C# 調(diào)用外部dll.doc

C# 調(diào)用外部dll.doc

ID:49765762

大?。?20.80 KB

頁數(shù):18頁

時間:2020-03-04

C# 調(diào)用外部dll.doc_第1頁
C# 調(diào)用外部dll.doc_第2頁
C# 調(diào)用外部dll.doc_第3頁
C# 調(diào)用外部dll.doc_第4頁
C# 調(diào)用外部dll.doc_第5頁
資源描述:

《C# 調(diào)用外部dll.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、C#調(diào)用外部dll一、DLL與應(yīng)用程序動態(tài)鏈接庫(也稱為DLL,即為“DynamicLinkLibrary”的縮寫)是MicrosoftWindows最重要的組成要素之一,打開Windows系統(tǒng)文件夾,你會發(fā)現(xiàn)文件夾中有很多DLL文件,Windows就是將一些主要的系統(tǒng)功能以DLL模塊的形式實現(xiàn)。動態(tài)鏈接庫是不能直接執(zhí)行的,也不能接收消息,它只是一個獨立的文件,其中包含能被程序或其它DLL調(diào)用來完成一定操作的函數(shù)(方法。注:C#中一般稱為“方法”),但這些函數(shù)不是執(zhí)行程序本身的一部分,而是根據(jù)進程的需要按需載入,此時才能發(fā)揮作用。DLL只

2、有在應(yīng)用程序需要時才被系統(tǒng)加載到進程的虛擬空間中,成為調(diào)用進程的一部分,此時該DLL也只能被該進程的線程訪問,它的句柄可以被調(diào)用進程所使用,而調(diào)用進程的句柄也可以被該DLL所使用。在內(nèi)存中,一個DLL只有一個實例,且它的編制與具體的編程語言和編譯器都沒有關(guān)系,所以可以通過DLL來實現(xiàn)混合語言編程。DLL函數(shù)中的代碼所創(chuàng)建的任何對象(包括變量)都歸調(diào)用它的線程或進程所有。下面列出了當(dāng)程序使用DLL時提供的一些優(yōu)點:[1]1)使用較少的資源當(dāng)多個程序使用同一個函數(shù)庫時,DLL可以減少在磁盤和物理內(nèi)存中加載的代碼的重復(fù)量。這不僅可以大大影響在前

3、臺運行的程序,而且可以大大影響其他在Windows操作系統(tǒng)上運行的程序。2)推廣模塊式體系結(jié)構(gòu)DLL有助于促進模塊式程序的開發(fā)。這可以幫助您開發(fā)要求提供多個語言版本的大型程序或要求具有模塊式體系結(jié)構(gòu)的程序。模塊式程序的一個示例是具有多個可以在運行時動態(tài)加載的模塊的計帳程序。3)簡化部署和安裝當(dāng)DLL中的函數(shù)需要更新或修復(fù)時,部署和安裝DLL不要求重新建立程序與該DLL的鏈接。此外,如果多個程序使用同一個DLL,那么多個程序都將從該更新或修復(fù)中獲益。當(dāng)您使用定期更新或修復(fù)的第三方DLL時,此問題可能會更頻繁地出現(xiàn)。二、DLL的調(diào)用每種編程語

4、言調(diào)用DLL的方法都不盡相同,在此只對用C#調(diào)用DLL的方法進行介紹。首先,您需要了解什么是托管,什么是非托管。一般可以認為:非托管代碼主要是基于win32平臺開發(fā)的DLL,activeX的組件,托管代碼是基于.net平臺開發(fā)的。如果您想深入了解托管與非托管的關(guān)系與區(qū)別,及它們的運行機制,請您自行查找資料,本文件在此不作討論。(一)調(diào)用DLL中的非托管函數(shù)一般方法首先,應(yīng)該在C#語言源程序中聲明外部方法,其基本形式是:[DLLImport(“DLL文件”)]修飾符extern返回變量類型方法名稱(參數(shù)列表)其中:DLL文件:包含定義外部方

5、法的庫文件。修飾符:訪問修飾符,除了abstract以外在聲明方法時可以使用的修飾符。返回變量類型:在DLL文件中你需調(diào)用方法的返回變量類型。方法名稱:在DLL文件中你需調(diào)用方法的名稱。參數(shù)列表:在DLL文件中你需調(diào)用方法的列表。注意:需要在程序聲明中使用System.Runtime.InteropServices命名空間。DllImport只能放置在方法聲明上。DLL文件必須位于程序當(dāng)前目錄或系統(tǒng)定義的查詢路徑中(即:系統(tǒng)環(huán)境變量中Path所設(shè)置的路徑)。返回變量類型、方法名稱、參數(shù)列表一定要與DLL文件中的定義相一致。若要使用其它函數(shù)

6、名,可以使用EntryPoint屬性設(shè)置,如:[DllImport("user32.dll",EntryPoint="MessageBoxA")]staticexternintMsgBox(inthWnd,stringmsg,stringcaption,inttype);其它可選的DllImportAttribute屬性:CharSet指示用在入口點中的字符集,如:CharSet=CharSet.Ansi;SetLastError指示方法是否保留Win32"上一錯誤",如:SetLastError=true;ExactSpelling指示

7、EntryPoint是否必須與指示的入口點的拼寫完全匹配,如:ExactSpelling=false;PreserveSig指示方法的簽名應(yīng)當(dāng)被保留還是被轉(zhuǎn)換,如:PreserveSig=true;CallingConvention指示入口點的調(diào)用約定,如:CallingConvention=CallingConvention.Winapi;此外,關(guān)于“數(shù)據(jù)封送處理”及“封送數(shù)字和邏輯標量”請參閱其它一些文章[2]。C#例子:1.啟動VS.NET,新建一個項目,項目名稱為“Tzb”,模板為“Windows應(yīng)用程序”。2.在“工具箱”的“W

8、indows窗體”項中雙擊“Button”項,向“Form1”窗體中添加一個按鈕。3.改變按鈕的屬性:Name為“B1”,Text為“用DllImport調(diào)用DLL彈出提示框”,并將按鈕B1調(diào)

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。