成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#調用Windows API之調用格式淺析

開發 后端
C#調用Windows API之調用格式淺析主要向你介紹了C#調用Windows API的調用格式,包括C#調用Windows API具體的實例步驟和注意事項。

C#調用Windows API之調用格式前言:在.Net Framework SDK文檔中,關于調用Windows API的指示比較零散,并且其中稍全面一點的是針對Visual Basic .net講述的。本文將C#中調用API的要點匯集如下,希望給未在C#中使用過API的朋友一點幫助。另外如果安裝了Visual Studio .net的話,在C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\Technologies\Interop\PlatformInvoke\WinAPIs\CS目錄下有大量的調用API的例子。

C#調用Windows API之調用格式

  1.  using System.Runtime.InteropServices;   
  2.  
  3. //引用此名稱空間,簡化后面的代碼  
  4. ...  
  5. //使用DllImportAttribute特性來引入api函數,  
  6.  
  7. //注意聲明的是空方法,即方法體為空。  
  8. [DllImport("user32.dll")]  
  9. public static extern ReturnType FunctionName(type arg1,type arg2,...);  
  10. //調用時與調用其他方法并無區別   

C#:調用Windows API之調用格式細節可以使用字段進一步說明特性,用逗號隔開,如:

  1. [ DllImport( "kernel32", EntryPoint="GetVersionEx" )]   

C#調用Windows API之調用格式之DllImportAttribute特性的公共字段如下:

1、CallingConvention 指示向非托管實現傳遞方法參數時所用的 CallingConvention 值。

CallingConvention.Cdecl : 調用方清理堆棧。它使您能夠調用具有 varargs 的函數。

CallingConvention.StdCall : 被調用方清理堆棧。它是從托管代碼調用非托管函數的默認約定。

2、CharSet 控制調用函數的名稱版本及指示如何向方法封送 String 參數。

此字段被設置為 CharSet 值之一。如果 CharSet 字段設置為 Unicode,則所有字符串參數在傳遞到非托管實現之前都轉換成 Unicode 字符。這還導致向 DLL EntryPoint 的名稱中追加字母“W”。如果此字段設置為 Ansi,則字符串將轉換成 ANSI 字符串,同時向 DLL EntryPoint 的名稱中追加字母“A”。

大多數 Win32 API 使用這種追加“W”或“A”的約定。如果 CharSet 設置為 Auto,則這種轉換就是與平臺有關的(在 Windows NT 上為 Unicode,在 Windows 98 上為 Ansi)。CharSet 的默認值為 Ansi。CharSet 字段也用于確定將從指定的 DLL 導入哪個版本的函數。

CharSet.Ansi 和 CharSet.Unicode 的名稱匹配規則大不相同。對于 Ansi 來說,如果將 EntryPoint 設置為“MyMethod”且它存在的話,則返回“MyMethod”。如果 DLL 中沒有“MyMethod”,但存在“MyMethodA”,則返回“MyMethodA”。

對于 Unicode 來說則正好相反。如果將 EntryPoint 設置為“MyMethod”且它存在的話,則返回“MyMethodW”。如果 DLL 中不存在“MyMethodW”,但存在“MyMethod”,則返回“MyMethod”。如果使用的是 Auto,則匹配規則與平臺有關(在 Windows NT 上為 Unicode,在 Windows 98 上為 Ansi)。如果 ExactSpelling 設置為 true,則只有當 DLL 中存在“MyMethod”時才返回“MyMethod”。

3、EntryPoint 指示要調用的 DLL 入口點的名稱或序號。

如果你的方法名不想與api函數同名的話,一定要指定此參數,例如:

  1.  [DllImport("user32.dll",  
  2.  
  3. CharSet="CharSet.Auto",EntryPoint="MessageBox")]  
  4. public static extern int MsgBox(  
  5.  
  6. IntPtr hWnd,string txt,string caption, int type);  

4、ExactSpelling 指示是否應修改非托管 DLL 中的入口點的名稱,以與 CharSet 字段中指定的 CharSet 值相對應。如果為 true,則當 DllImportAttribute.CharSet 字段設置為 CharSet 的 Ansi 值時,向方法名稱中追加字母 A,當 DllImportAttribute.CharSet 字段設置為 CharSet 的 Unicode 值時,向方法的名稱中追加字母 W。此字段的默認值是 false。

5、PreserveSig 指示托管方法簽名不應轉換成返回 HRESULT、并且可能有一個對應于返回值的附加 [out, retval] 參數的非托管簽名。

6、SetLastError 指示被調用方在從屬性化方法返回之前將調用 Win32 API SetLastError。 true 指示調用方將調用 SetLastError,默認為 false。運行時封送拆收器將調用 GetLastError 并緩存返回的值,以防其被其他 API 調用重寫。用戶可通過調用 GetLastWin32Error 來檢索錯誤代碼。

C#調用Windows API之調用格式相關的內容就向你介紹到這里,希望對你了解和學習C#調用Windows API之調用格式有所幫助。

【編輯推薦】

  1. C# Windows CE特點之模塊化
  2. C# Windows CE特點之可移植性
  3. C# Windows CE特點之兼容性
  4. C# Windows CE特點之可連接性
  5. C# Windows CE特點之實時性
責任編輯:仲衡 來源: csdn
相關推薦

2009-08-17 13:26:20

C#調用Windows

2009-07-31 16:12:10

Windows APIC#

2009-08-03 13:34:57

C#調用Windows

2009-08-17 13:49:20

C#中調用Window

2009-08-04 09:30:33

C#調用ImageAn

2009-07-31 17:28:35

C#語言調用DLL

2009-08-14 09:15:28

C#調用構造函數

2009-08-12 10:35:50

C#調用ActiveX

2009-08-25 16:16:27

C#調用Windows

2009-08-06 17:57:14

C# webServiC# WebServi

2009-08-07 16:10:20

C#調用API

2009-08-05 15:10:19

C#調用GoogleE

2009-08-03 13:13:52

C#調用Outlook

2009-11-03 12:52:38

VB.NET Wind

2009-08-21 11:24:16

C#異步調用

2009-09-03 13:08:43

C#調用記事本

2009-08-07 16:43:44

C#調用Windows

2009-08-03 14:09:15

C#調用API

2009-08-21 17:42:36

C#調用API

2009-09-18 19:09:41

C# COM組件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲 欧美 在线 一区 | 亚洲区一区二 | 91 在线| 日韩免费一区二区 | 日韩视频精品在线 | 精品久久久久久亚洲精品 | 四色成人av永久网址 | 一区二区三区日 | 免费午夜电影 | 亚洲狠狠丁香婷婷综合久久久 | 国产高清区 | 九九综合 | 四虎永久在线精品免费一区二 | 9999精品视频 | 国产精品一区二区久久 | 亚洲高清在线观看 | 成人妇女免费播放久久久 | 国产国拍亚洲精品av | 亚洲一区二区在线免费观看 | 成人午夜免费福利视频 | 一区二区三区精品在线 | 国产一区二区 | 中文字幕乱码一区二区三区 | 亚洲精品久久久久久久久久久 | 国产在线视频一区二区 | 国产欧美在线视频 | 狠狠入ady亚洲精品经典电影 | 日韩精品一区二区三区久久 | 久久久久久免费毛片精品 | 91麻豆精品国产91久久久资源速度 | 成人三级视频 | 国产小视频自拍 | 国产欧美精品 | 欧美一级欧美三级在线观看 | 一级片子 | 青青久在线视频 | 国产做a爱片久久毛片 | 成人免费黄色片 | 久久久久一区二区三区四区 | 人人看人人搞 | 亚洲成人中文字幕 |