a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

c#中無法將類型“int”隱式轉換為“System.IntPtr”

2023-05-20 20:23:34
字體:
來源:轉載
供稿:網友

我引用了一個api函數時出現無法將類型“int”隱式轉換為“System.IntPtr” 的問題,我在聲明中把intptr換成了int還是不可以,這是為什么呢?要如何處理呢?

C#中的IntPtr類型稱為“平臺特定的整數類型”,它們用于本機資源,如窗口句柄。

資源的大小取決于使用的硬件和操作系統,但其大小總是足以包含系統的指針(因此也可以包含資源的名稱)。

所以,在您調用的API函數中一定有類似窗體句柄這樣的參數,那么當您聲明這個函數時,您應該將它顯式地聲明為IntPtr類型。

例如,在一個C#程序中調用Win32API mciSendString函數控制光盤驅動器,這個函數的函數原型是:

MCIERROR mciSendString(
            LPCTSTR lpszCommand, 
            LPTSTR lpszReturnString,
            UINT cchReturn, 
            HANDLE hwndCallback
        );

首先在C#中聲明這個函數:

[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構造函數: IntPtr a = new IntPtr(2121);

這里有兩點比較重要:

(1)在C#中聲明Win32API時,一定要按照WinAPI的原型來聲明,不要改變它的數據類型;

(2)盡量不要過多使用類型強制轉換或構造函數的方式初始化一個IntPtr類型的變量,這樣會使程序變得難于理解并容易出錯。

上一篇:C#4.0的新特性

下一篇:C#的前途如何

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: av看片网| 亚洲一区二区中文字幕 | 在线欧美日韩 | 亚洲精品免费观看 | 欧美福利影院 | 少妇一区二区三区毛片免费下载看 | 男人的天堂久久 | 天天干天天摸 | 亚洲免费在线 | 欧美一区二区在线视频 | 亚洲欧美中文日韩v在线观看 | 日本亚洲精品一区二区三区 | 伊人网国产 | 久久国产综合 | 中文二区 | 欧美日韩国产综合视频 | 国产不卡视频在线观看 | 91精品中文字幕一区二区三区 | 久久机热| 精品suv一区二区 | 97色在线视频 | 天天干狠狠干 | 韩国精品一区二区 | 国产精品久久久久久久裸模 | 日韩成人久久 | 欧美激情一区二区三级高清视频 | 国产精品久久久久无码av | 亚洲人成人一区二区在线观看 | 中文字幕在线视频观看 | 久久99精品久久久久久园产越南 | 色综合免费 | www.污污视频| 男女羞羞视频免费观看 | 国产二区在线播放 | 国产精品福利在线观看 | 日本一区二区三区中文字幕 | 免费看特级毛片 | 在线观看日韩精品 | 国产特黄| 久久se精品一区精品二区 | 成人综合在线观看 |