国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > C# > 正文

C#調用windows api的要點

2024-09-07 17:05:13
字體:
來源:轉載
供稿:網友

  在.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的例子。

  一、調用格式

  using System.Runtime.InteropServices; //引用此名稱空間,簡化后面的代碼

  ...

  //使用DllImportAttribute特性來引入api函數,注意聲明的是空方法,即方法體為空。

  [DllImport("user32.dll")]

  public static extern ReturnType FunctionName(type arg1,type arg2,...);

  //調用時候與調用其他方法并無區別

  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函數同名的話,一定要指定此參數,例如:

  [DllImport("user32.dll",CharSet="CharSet.Auto",EntryPoint="MessageBox")]

  public static extern int MsgBox(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 來檢索錯誤代碼。

  二、參數類型:

  1、數值型直接用對應的就可。

  2、字符串指針(api) -> string (.net)

  3、句柄 (dWord) -> IntPtr

  4、結構 -> 結構或者類

  這種情況下,要先用StructLayout特性限定聲明,例如:

  // declared as class

  [ StructLayout( LayoutKind.Sequential )]

  public class OSVersionInfo

  {

  public int OSVersionInfoSize;

  public int majorVersion;

  public int minorVersion;

  public int buildNumber;

  public int platformId;

  [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]

  public String versionString;

  }

  // declared as struct

  [ StructLayout( LayoutKind.Sequential )]

  public struct OSVersionInfo2

  {

  public int OSVersionInfoSize;

  public int majorVersion;

  public int minorVersion;

  public int buildNumber;

  public int platformId;

  [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]

  public String versionString;

  }

  MashalAs特性:用于描述字段、方法或參數的封送處理格式。特性作為參數前綴并指定目標需要的數據類型。例如,以下代碼將兩個參數作為數據類型長指針封送給 Windows API 函數的字符串 (LPStr):

  [MarshalAs(UnmanagedType.LPStr)]

  String existingfile;

  [MarshalAs(UnmanagedType.LPStr)]

  String newfile;

  注意結構作為參數時候,一般前面要加上ref修飾符,否則會出現錯誤:對象的引用沒有指定對象的實例。

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

  public static extern bool GetVersionEx2( ref OSVersionInfo2 osvi );

 

共2頁上一頁12下一頁
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
四虎网站在线观看| 国产野外战在线播放| 国产精品久久久久白浆| 免费网站看黄yyy222| 在线观看中文字幕| 蜜桃视频中文字幕| 国产三级视频在线| 亚洲精品aaaa| 91xxx在线观看| 精品美女在线观看视频在线观看| 在线中文字幕第一页| xxxxx中文字幕| 国产三级自拍| 青青久草在线| 国产精品视频h| 女子免费在线观看视频www| 国产系列电影在线播放网址| av一本在线| 尤物视频免费在线观看| 国产精品视频二区三区| 日本片在线看| 国产精品视频福利一区二区| 日本亚洲欧美| 国产成+人+亚洲+欧美+综合| 欧美日韩一区二区三区视视频 | 中文资源在线网| 黄色在线视频观看网站| 精品国产免费观看一区| 激情小说 在线视频| 亚洲电影视频在线| 精品99又大又爽又硬少妇毛片 | 在线观看av中文| 中文字幕国产视频| 黄色av网站在线免费观看| 亚洲日本伊人| 99高清免费国产自产拍| 国产无遮挡又黄又爽免费网站 | 日本亚洲欧美| 亚洲色婷婷综合开心网| 69日小视频在线观看| 中文字幕视频免费在线观看| 狠狠干五月天| 日韩欧美中文字幕不卡| 在线观看的av网站| 四虎久久影院| 免费国产在线视频| 激情五月色综合亚洲小说| 国产在线色视频| 国产另类图片| 国产福利在线| aaa大片在线观看| 在线观看的av| 嫩草在线播放| 91caoporn在线| 国产精品伦一区二区三区视频| 国产小视频在线播放| 国产福利免费观看| 国产馆av播放| 青青草中文字幕| 国产男女猛烈无遮挡免费视频| 综合图区亚洲白拍在线 | 国产三区在线观看| 国产一级激情| 亚洲最新永久在线观看| 久久久久久久久亚洲精品| 国产亚洲精品久久久久久移动网络| 国产网站在线播放| 精品伦理一区二区| 亚洲激情丁香| 国产亚洲精品拍拍拍拍拍| 在线中文字幕视频| 欧美精品久久久久久久小说| 午夜视频免费在线观看| 在线免费看黄| 国产一区二区三区美女秒播| av网站大全在线观看| 国产一级免费在线观看| 人人干在线视频| 国产精品178页| 激情六月丁香| gogo在线高清视频| 国产二区三区在线| 福利视频网站导航| 一本久久精品| 精品麻豆一区二区三区| 中文字幕中文字幕在线中高清免费版| 伊人色综合网| 精品麻豆视频| 国产天堂在线| 国产精品一区在线看| h视频在线网站| 精品一区二区三区免费站| 99视频免费在线观看| 九九热在线免费视频| www.eeuss影院| 在线观看的av网站| 亚洲天堂视频在线观看免费| 午夜视频99| 久久五月精品中文字幕 | 九九热视频免费在线观看| 一级二级三级在线观看| 999在线视频| 在线成人综合色一区| 精品麻豆视频| 在线黄色国产电影| jizz在线免费观看| 青青青手机在线视频观看| 亚洲大香人伊一本线| 四虎精品视频| 六月天色婷婷| 男女午夜视频在线观看| 噜噜噜噜噜在线视频| 九九热视频免费观看| 激情丁香婷婷| 1区2区3区在线| 91三级在线| 青草在线视频在线观看| 国产尤物一区二区三区| 国产视频精品久久| av影视在线看| 国产精品偷乱一区二区三区| 国产白浆在线| 男人操女人免费网站| 国产深夜视频在线观看| 99热免费观看| 轻轻色免费在线视频| 天堂资源在线中文| 99re在线视频| 国产精品自产拍在线网站| 国产porn在线| 福利资源在线久| 亚洲精品视频区| 国产欧美日本亚洲精品一4区| 97在线超碰| 国产乱妇乱子在线播视频播放网站 | 国产视频一二区| 亚洲电影先锋| 国产毛片在线| a视频免费看| 国产精品666| 丁香六月婷婷| 人成在线免费视频| 精品卡一卡卡2卡3网站| 国产亚av手机在线观看| 欧美精品一区二区三区免费| 国产91久久久久蜜臀青青天草二| 久久精品国产亚洲777| 国产不卡一卡2卡三卡4卡5卡在线| 开心快乐六月丁香婷婷| 在线视频观看你懂的| 国产午夜三区视频在线| 国产农村一级特黄α**毛片 | 热99re久久精品这里都是免费| 国产精品伦理一区二区三区| 老司机精品视频一区二区| 日本综合一区二区三区| 樱花草在线观看www| 国产成人久久精品77777| 国产精品视频一区二区久久 | 国产成人午夜电影| 国产精品视频一区二区久久| 老司机在线视频二区| 日本一二三区视频免费高清| 一本大道香蕉8中文在线视频| 精品176二区| 影音先锋日韩| 四虎免费视频| www.色婷婷| 九九热在线视频免费观看| 欧美日韩视频精品二区| 国产免费av高清在线| 最近免费中文字幕大全免费第三页 | 中文字幕视频免费在线观看| 免费a级人成a大片在线观看| 免费看成年人视频在线观看| 九九热视频在线观看| 国产小视频免费在线网址| 国产95在线|亚洲| www.91在线播放| 国产麻豆综合视频在线观看| 最近免费中文字幕在线第一页| 国产视频福利在线| 992tv在线观看在线播放| av在线免费播放网站| 国产精品一区二区三区高清在线| 尤物视频在线观看| 精品视频麻豆入口| 麻豆精品免费视频入口| 黄色毛片在线观看| 精品视频二区| 狠狠色丁香婷婷| 91最新在线| 激情网站在线| av激情在线| 国产精品理人伦一区二区三区| 亚洲网站视频在线观看| 国产亚洲精品久久久久久移动网络 | 国产精品亚洲色图| 性网站在线观看| 国产精品毛片一区二区三区四区|