C#中IntPtr類型的具體使用
什么是IntPtr
先來看看MSDN上說的:用于表示指針或句柄的平臺特定類型。這個其實說出了這樣兩個事實,IntPtr 可以用來表示指針或句柄、它是一個平臺特定類型。
C#中的IntPtr類型稱為“平臺特定的整數(shù)類型”,它們用于本機資源,如窗口句柄。資源的大小取決于使用的硬件和操作系統(tǒng),但其大小總是足以包含系統(tǒng)的指針(因此也可以包含資源的名稱)。
所以,在您調用的API函數(shù)中一定有類似窗體句柄這樣的參數(shù),那么當您聲明這個函數(shù)時,您應該將它顯式地聲明為IntPtr類型。
例如,在一個C#程序中調用Win32API mciSendString函數(shù)控制光盤驅動器,這個函數(shù)的函數(shù)原型是:
MCIERROR mciSendString(? LPCTSTR lpszCommand,? LPTSTR lpszReturnString,? UINT cchReturn,? HANDLE hwndCallback? );?
首先在C#中聲明這個函數(shù):
[DllImport("winmm.dll")]?
private static extern long mciSendString(string a,string b,uint c,IntPtr d);?然后用這樣的方法調用:
mciSendString("set cdaudio door open", null, 0, this.Handle);?您也可以使用IntPtr.Zero將句柄設置為0;
或者使用類型強制轉換:
mciSendString("set cdaudio door open", null, 0, (IntPtr)0 );?或者,使用IntPtr構造函數(shù):
IntPtr a = new IntPtr(2121);?
1.C#中的IntPtr類型被稱之為“平臺特定的整數(shù)類型”,用于本機資源,例如窗口句柄。
2.資源的大小取決于使用的硬件和操作系統(tǒng),即此類型的實例在32位硬件和操作系統(tǒng)中將是32位,在64位硬件和操作系統(tǒng)中將是64位;但其大小總是足以包含系統(tǒng)的指針(因此也可以包含資源的名稱)。
3.在調用API函數(shù)時,類似含有窗口句柄參數(shù)(HANDLE)的原型函數(shù),應顯示地聲明為IntPtr類型。
4.IntPtr類型對多線程操作是安全的。
5. int 和IntPtr互轉
int i=1;? IntPtr p=new IntPtr(i); ? int ch_i=(int) p;
6. IntPtr和string互轉
string str="a"; IntPtr p=Marshal.StringToHGlobalAnsi(str); string s=Marshal.PtrToStringAnsi(p); Marshal.FreeHGlobal(p);
到此這篇關于C#中IntPtr類型的具體使用的文章就介紹到這了,更多相關C# IntPtr類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#微信公眾平臺開發(fā)之a(chǎn)ccess_token的獲取存儲與更新
這篇文章主要介紹了C#微信公眾平臺開發(fā)之a(chǎn)ccess_token的獲取存儲與更新的相關資料,需要的朋友可以參考下2016-03-03
C# 使用匿名函數(shù)解決EventHandler參數(shù)傳遞的難題
C#動態(tài)生成PictureBox并綁定右鍵菜單,實現(xiàn)刪除圖片2009-05-05
C#實現(xiàn)兩個richtextbox控件滾動條同步滾動的簡單方法
這篇文章主要給大家介紹了C#實現(xiàn)兩個richtextbox控件滾動條同步滾動的簡單方法,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-05-05
C#并行編程之數(shù)據(jù)并行Tasks.Parallel類
這篇文章介紹了C#并行編程之數(shù)據(jù)并行Tasks.Parallel類,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
C#創(chuàng)建數(shù)據(jù)庫及導入sql腳本的方法
這篇文章主要介紹了C#創(chuàng)建數(shù)據(jù)庫及導入sql腳本的方法,涉及C#針對數(shù)據(jù)庫的創(chuàng)建、連接、導入等相關操作技巧,需要的朋友可以參考下2015-12-12
C#實現(xiàn)按照指定長度在數(shù)字前補0方法小結
這篇文章主要介紹了C#實現(xiàn)按照指定長度在數(shù)字前補0方法,實例總結了兩個常用的數(shù)字補0的技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04
C#使用CallContext緩存線程數(shù)據(jù)
這篇文章介紹了C#使用CallContext緩存線程數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05

