国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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#的前途如何

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宣武区| 清水河县| 安仁县| 富锦市| 神池县| 木兰县| 岳西县| 彰化县| 郎溪县| 全南县| 潢川县| 陕西省| 高尔夫| 梁平县| 博客| 新巴尔虎左旗| 满洲里市| 寿宁县| 招远市| 泗水县| 浦城县| 阿鲁科尔沁旗| 九台市| 监利县| 克拉玛依市| 巴林左旗| 富民县| 固安县| 天峨县| 阿拉尔市| 清丰县| 新兴县| 灵武市| 广河县| 乌兰浩特市| 南通市| 赫章县| 普兰店市| 桐城市| 上思县| 屏东县|