當(dāng)前位置:
首頁(yè) >
c#中无法将类型“int”隐式转换为“System.IntPtr”
發(fā)布時(shí)間:2024/4/17
47
豆豆
生活随笔
收集整理的這篇文章主要介紹了
c#中无法将类型“int”隐式转换为“System.IntPtr”
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
問: c#中無(wú)法將類型“int”隱式轉(zhuǎn)換為“System.IntPtr” 這個(gè)是我引用了一個(gè)api函數(shù)時(shí)出現(xiàn)的問題,我在聲明中把intptr換成了int還是不可以,這是為什么呢?要如何處理呢? 答:您好,C#中的IntPtr類型稱為“平臺(tái)特定的整數(shù)類型”,它們用于本機(jī)資源,如窗口句柄。資源的大小取決于使用的硬件和操作系統(tǒng),但其大小總是足以包含系統(tǒng)的指針(因此也可以包含資源的名稱)。 所以,在您調(diào)用的API函數(shù)中一定有類似窗體句柄這樣的參數(shù),那么當(dāng)您聲明這個(gè)函數(shù)時(shí),您應(yīng)該將它顯式地聲明為IntPtr類型。 例如,在一個(gè)C#程序中調(diào)用Win32API mciSendString函數(shù)控制光盤驅(qū)動(dòng)器,這個(gè)函數(shù)的函數(shù)原型是: MCIERROR mciSendString( LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback ); 首先在C#中聲明這個(gè)函數(shù): [DllImport("winmm.dll")] private static extern long mciSendString(string a,string b,uint c,IntPtr d); 然后用這樣的方法調(diào)用: mciSendString("set cdaudio door open", null, 0, this.Handle); 您也可以使用IntPtr.Zero將句柄設(shè)置為0; 或者使用類型強(qiáng)制轉(zhuǎn)換: mciSendString("set cdaudio door open", null, 0, (IntPtr)0 ); 或者,使用IntPtr構(gòu)造函數(shù): IntPtr a = new IntPtr(2121); 這里有兩點(diǎn)比較重要: 一是在C#中聲明Win32API時(shí),一定要按照WinAPI的原型來(lái)聲明,不要改變它的數(shù)據(jù)類型; 二是盡量不要過多使用類型強(qiáng)制轉(zhuǎn)換或構(gòu)造函數(shù)的方式初始化一個(gè)IntPtr類型的變量,這樣會(huì)使程序變得難于理解并容易出錯(cuò)。 希望這些信息對(duì)您有幫助。 本文轉(zhuǎn)自:http://zhidao.baidu.com/question/22825956.html
轉(zhuǎn)載于:https://www.cnblogs.com/zq281660880/archive/2013/02/20/2918577.html
總結(jié)
以上是生活随笔為你收集整理的c#中无法将类型“int”隐式转换为“System.IntPtr”的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 补补补补1月TAT
- 下一篇: C#面向对象--继承