中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

C#調用windows api的要點
來源:易賢網 閱讀:1461 次 日期:2015-02-06 15:24:05
溫馨提示:易賢網小編為您整理了“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的例子。

一、調用格式

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 );

三、如果在調用平臺 invoke 后的任何位置都未引用托管對象,則垃圾回收器可能將完成該托管對象。這將釋放資源并使句柄無效,從而導致平臺 invoke 調用失敗。用 HandleRef 包裝句柄可保證在平臺 invoke 調用完成前,不對托管對象進行垃圾回收。

更多信息請查看IT技術專欄

更多信息請查看數據庫
易賢網手機網站地址:C#調用windows api的要點
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
在线不卡a资源高清| 日韩午夜三级在线| 亚洲欧美视频在线观看| 亚洲精品九九| 在线免费观看一区二区三区| 国产乱码精品| 国产精品v亚洲精品v日韩精品| 女主播福利一区| 久久久久久香蕉网| 久久久91精品国产| 久久久久综合| 久久偷窥视频| 美女脱光内衣内裤视频久久影院 | 一区二区成人精品| 影音先锋亚洲视频| 国产精品久久中文| 欧美精品在线视频观看| 欧美极品一区| 欧美一区二视频| 午夜精品视频在线观看| 亚洲香蕉成视频在线观看| 在线观看国产成人av片| 亚洲高清影视| 99综合电影在线视频| 亚洲桃花岛网站| 校园春色综合网| 久久男人资源视频| 欧美不卡一卡二卡免费版| 欧美激情 亚洲a∨综合| 黄色一区二区三区四区| 欧美成人乱码一区二区三区| 久久久亚洲综合| 亚洲国产精品一区制服丝袜| 欧美肉体xxxx裸体137大胆| 欧美日韩一区二区视频在线| 国产精品成人午夜| 国产亚洲人成网站在线观看| 国产日韩精品在线| 久久精品视频在线播放| 亚洲激情在线播放| 亚洲靠逼com| 亚洲欧美成人一区二区在线电影| 午夜天堂精品久久久久| 久久久国产亚洲精品| 欧美精品黄色| 国产精品蜜臀在线观看| 在线欧美视频| 亚洲视频在线看| 久久精品色图| 欧美日韩综合在线| 国产丝袜美腿一区二区三区| 亚洲人成毛片在线播放| 亚洲一区二区三区精品在线| 久久久999精品视频| 欧美日韩1区2区| 国产视频综合在线| 一本大道久久a久久精品综合| 欧美一区影院| 国产精品高清一区二区三区| 影音先锋一区| 欧美专区在线观看一区| 国产精品久99| 99这里有精品| 欧美成人性生活| 韩国精品在线观看| 在线观看国产精品网站| 国产日韩一区欧美| 国产精品一级在线| 99热这里只有精品8| 欧美色视频日本高清在线观看| 国产欧美视频在线观看| 久久精品一区四区| 欧美精品免费播放| 久久久精品一区| 国产精品久久毛片a| 国产美女精品一区二区三区| 欧美精品在线一区| 亚洲综合欧美日韩| 黄色成人av在线| 欧美国产日本| 国产精品毛片在线| 久久综合久久久久88| 中日韩视频在线观看| 亚洲黄色一区| 国产在线拍揄自揄视频不卡99| 欧美一二三区在线观看| 一区二区三区波多野结衣在线观看| 欧美国产日韩精品免费观看| 久久综合电影一区| 国产精品亚洲网站| 黑人极品videos精品欧美裸| 亚洲一区二区三区免费视频 | 亚洲国产欧美一区二区三区同亚洲| 午夜在线视频观看日韩17c| 欧美视频久久| 亚洲一级二级在线| 国产精品欧美一区喷水| 亚洲一区在线观看视频 | 亚洲国内在线| 午夜在线一区二区| 一区二区三区偷拍| 99视频精品免费观看| 亚洲国产欧美不卡在线观看| 在线国产精品一区| 伊人狠狠色j香婷婷综合| 国产精品久久久久久久免费软件| 欧美日韩一区二区视频在线| 欧美成人亚洲成人| 欧美久久久久| 国产精品丝袜久久久久久app| 国产伊人精品| 亚洲国产欧美一区二区三区同亚洲| 亚洲成人在线视频网站| 亚洲无玛一区| 性欧美大战久久久久久久免费观看| 免费观看一级特黄欧美大片| 亚洲欧美怡红院| 亚洲成人在线网| 欧美啪啪一区| 国产精品久久二区二区| 国产综合视频在线观看| 黄色成人免费网站| 国产麻豆91精品| 国产日韩欧美日韩| 亚洲每日更新| 欧美三级视频在线| 亚洲欧美www| 国产视频欧美视频| 另类亚洲自拍| 亚洲日本欧美天堂| 国产精品v片在线观看不卡| 亚洲欧美视频在线观看视频| 国产自产2019最新不卡| 牛夜精品久久久久久久99黑人 | 国产精品亚洲综合一区在线观看| 欧美一级片久久久久久久| 国产一区二区三区在线观看免费| 久久久久久久一区二区| 日韩网站在线| 国内成人精品2018免费看 | 国产日韩欧美一区二区| 久久久久久久尹人综合网亚洲| 亚洲国产高潮在线观看| 欧美日韩国产综合久久| 欧美在线一二三| 亚洲肉体裸体xxxx137| 国产日韩精品电影| 欧美黄色免费| 性欧美1819sex性高清| 亚洲精品日本| 狠狠久久婷婷| 国产精品久久久久久久久久免费| 国内精品写真在线观看| 国产日韩欧美自拍| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美日韩视频在线观看一区二区三区 | 欧美精品观看| 亚洲女同精品视频| 亚洲欧洲在线看| 国产欧美一区视频| 欧美日韩高清在线播放| 久久午夜av| 篠田优中文在线播放第一区| 亚洲日本无吗高清不卡| 国内精品久久久久久影视8| 国产精品入口福利| 国产精品国产三级国产普通话蜜臀| 欧美jjzz| 蜜臀久久久99精品久久久久久 | 欧美日韩不卡视频| 免费短视频成人日韩| 久久久久久久成人| 欧美资源在线| 欧美淫片网站| 亚洲欧美网站| 亚洲欧美日韩在线观看a三区| 亚洲午夜精品| 午夜国产不卡在线观看视频| 亚洲午夜精品在线| 亚洲欧美国产77777| 午夜激情久久久| 欧美一区二区三区啪啪| 羞羞答答国产精品www一本| 亚洲欧美在线一区二区| 欧美一区二区三区啪啪| 久久久久久久综合日本| 蜜桃久久av一区| 免费亚洲电影在线| 欧美巨乳在线| 国产精品国产精品| 国产日韩欧美中文在线播放| 精品福利电影| 国产一区二区三区高清| 一区在线视频| 亚洲国产日韩一区| 亚洲人成人一区二区三区| 亚洲人成在线播放网站岛国| 91久久久久久久久| 日韩一级网站| 亚洲一区二区在线看|