[转]C#中的IntPtr类型
来源:互联网 发布:单片机pwm占空比调速 编辑:程序博客网 时间:2024/05/17 17:42
本文转自:http://zhidao.baidu.com/question/22825956.html
问:
c#中无法将类型“int”隐式转换为“System.IntPtr”
答:
您好,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);
这里有两点比较重要:
一是在C#中声明Win32API时,一定要按照WinAPI的原型来声明,不要改变它的数据类型;
二是尽量不要过多使用类型强制转换或构造函数的方式初始化一个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);
这里有两点比较重要:
一是在C#中声明Win32API时,一定要按照WinAPI的原型来声明,不要改变它的数据类型;
二是尽量不要过多使用类型强制转换或构造函数的方式初始化一个IntPtr类型的变量,这样会使程序变得难于理解并容易出错。
希望这些信息对您有帮助。
- [转]C#中的IntPtr类型
- C#中的IntPtr类型
- C#中的IntPtr类型
- C#中的IntPtr类型
- C#中的IntPtr类型
- C#中的IntPtr类型
- C#中的IntPtr类型
- C#中的IntPtr使用
- C#中的IntPtr使用
- C#中的IntPtr使用
- C#中的IntPtr类型(指针等用)
- C#学习之IntPtr类型
- C# 数组转Intptr
- C# 调用C++非托管DLL, C++中的const char *对应C#中的IntPtr类型。
- C中的char * 对应C#中的Intptr
- C# IntPtr pVoid 转 Object
- IntPtr类型
- IntPtr类型
- [转]用于验证码图片识别的类(C#源码)
- [转]U盘加载,卸载,拔出,插入,WM_DEVICECHANGE,WndProc,DBT_DEVICEARRIVAL,DBT_DEVICEREMOVECOMPLETE
- c# DirectShow 通过IAMVideoProcAmp的Set方法 来设置视频图像的Brightness 调整亮度
- [文摘20081016]SOHO_百度百科
- [转]DirectShow应用——视频捕捉WDM Vs VFW
- [转]C#中的IntPtr类型
- [引]C# WinForm DirectShow视频采集及图片抓取实例DxSnap
- [转]C# winform中不规则窗体制作的解决方案(已经解决24位色以上不能正常显示问题)
- c# 通过修改图片对象的文件的字节 变相"加密""解密"图片在磁盘的存储
- c# WinForm 定时执行某个后台操作 如把B文件夹下的文件Copy到A文件夹下
- [转]用C# 实现C/S模式下软件自动在线升级
- C# WinFrom SplitContainer和UserControl组成简单的类似于web系统的框架页
- [转]WebBrowser页面与WinForm交互技巧
- [转]c# winFrom 使窗体显示SplitContainer或Panel中