C#調(diào)用API函數(shù)詳細說明.doc

C#調(diào)用API函數(shù)詳細說明.doc

ID:50368084

大?。?4.50 KB

頁數(shù):24頁

時間:2020-03-08

C#調(diào)用API函數(shù)詳細說明.doc_第1頁
C#調(diào)用API函數(shù)詳細說明.doc_第2頁
C#調(diào)用API函數(shù)詳細說明.doc_第3頁
C#調(diào)用API函數(shù)詳細說明.doc_第4頁
C#調(diào)用API函數(shù)詳細說明.doc_第5頁
資源描述:

《C#調(diào)用API函數(shù)詳細說明.doc》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在工程資料-天天文庫。

1、C#:[DllImport("kernel32.dll")]是什么意思??這叫引入kernel32.dll這個動態(tài)連接庫。這個動態(tài)連接庫里面包含了很多WindowsAPI函數(shù),如果你想使用這面的函數(shù),就需要這么引入。舉個例子:[DllImport("kernel32.dll")]privatestaticexternvoid函數(shù)名(參數(shù),[參數(shù)]);函數(shù)名就是一個屬于kernel32.dll里的一個函數(shù)。完了你就可以用那個函數(shù)了。kernel32.dll調(diào)用kernel32.dll這個DLL里面的A

2、PI接口!系統(tǒng)API例如[DllImport("user32.dll")]//--引入APIpublicstaticexternReturnTypeFunctionName(typearg1,typearg2,...);//--聲明方法調(diào)用該方法是和調(diào)用普通方法沒區(qū)別DLLImport屬性現(xiàn)在是更深入地進行探討的時候了。在對托管代碼進行P/Invoke調(diào)用時,DllImportAttribute類型扮演著重要的角色。DllImportAttribute的主要作用是給CLR指示哪個DLL導出您想要調(diào)用

3、的函數(shù)。相關DLL的名稱被作為一個構(gòu)造函數(shù)參數(shù)傳遞給DllImportAttribute。如果您無法肯定哪個DLL定義了您要使用的WindowsAPI函數(shù),PlatformSDK文檔將為您提供最好的幫助資源。在WindowsAPI函數(shù)主題文字臨近結(jié)尾的位置,SDK文檔指定了C應用程序要使用該函數(shù)必須鏈接的.lib文件。在幾乎所有的情況下,該.lib文件具有與定義該函數(shù)的系統(tǒng)DLL文件相同的名稱。例如,如果該函數(shù)需要C應用程序鏈接到Kernel32.lib,則該函數(shù)就定義在Kernel32.dll中。

4、您可以在MessageBeep中找到有關MessageBeep的PlatformSDK文檔主題。在該主題結(jié)尾處,您會注意到它指出庫文件是User32.lib;這表明MessageBeep是從User32.dll中導出的。可選的DllImportAttribute屬性除了指出宿主DLL外,DllImportAttribute還包含了一些可選屬性,其中四個特別有趣:EntryPoint、CharSet、SetLastError和CallingConvention。EntryPoint在不希望外部托管方法

5、具有與DLL導出相同的名稱的情況下,可以設置該屬性來指示導出的DLL函數(shù)的入口點名稱。當您定義兩個調(diào)用相同非托管函數(shù)的外部方法時,這特別有用。另外,在Windows中還可以通過它們的序號值綁定到導出的DLL函數(shù)。如果您需要這樣做,則諸如“#1”或“#129”的EntryPoint值指示DLL中非托管函數(shù)的序號值而不是函數(shù)名。CharSet對于字符集,并非所有版本的Windows都是同樣創(chuàng)建的。Windows9x系列產(chǎn)品缺少重要的Unicode支持,而WindowsNT和WindowsCE系列則一開始

6、就使用Unicode。在這些操作系統(tǒng)上運行的CLR將Unicode用于String和Char數(shù)據(jù)的內(nèi)部表示。但也不必擔心—當調(diào)用Windows9xAPI函數(shù)時,CLR會自動進行必要的轉(zhuǎn)換,將其從Unicode轉(zhuǎn)換為ANSI。如果DLL函數(shù)不以任何方式處理文本,則可以忽略DllImportAttribute的CharSet屬性。然而,當Char或String數(shù)據(jù)是等式的一部分時,應該將CharSet屬性設置為CharSet.Auto。這樣可以使CLR根據(jù)宿主OS使用適當?shù)淖址H绻麤]有顯式地設置Ch

7、arSet屬性,則其默認值為CharSet.Ansi。這個默認值是有缺點的,因為對于在Windows2000、WindowsXP和WindowsNT?上進行的interop調(diào)用,它會消極地影響文本參數(shù)封送處理的性能。應該顯式地選擇CharSet.Ansi或CharSet.Unicode的CharSet值而不是使用CharSet.Auto的唯一情況是:您顯式地指定了一個導出函數(shù),而該函數(shù)特定于這兩種Win32OS中的某一種。ReadDirectoryChangesWAPI函數(shù)就是這樣的一個例子,它只存

8、在于基于WindowsNT的操作系統(tǒng)中,并且只支持Unicode;在這種情況下,您應該顯式地使用CharSet.Unicode。有時,WindowsAPI是否有字符集關系并不明顯。一種決不會有錯的確認方法是在PlatformSDK中檢查該函數(shù)的C語言頭文件。(如果您無法肯定要看哪個頭文件,則可以查看PlatformSDK文檔中列出的每個API函數(shù)的頭文件。)如果您發(fā)現(xiàn)該API函數(shù)確實定義為一個映射到以A或W結(jié)尾的函數(shù)名的宏,則字符集與您嘗試調(diào)用的函數(shù)有關系。Windo

當前文檔最多預覽五頁,下載文檔查看全文

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

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