C# Int 和 IntPtr 互相转换
2014-02-27 10:32
495 查看
//int转IntPtr int i = 12; IntPtr p = new IntPtr(i); IntPtr p1 = (IntPtr)i; //IntPtr转int int myi = (int)p; MessageBox.Show(myi.ToString());
补充:
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类型的变量,这样会使程序变得难于理解并容易出错。
相关文章推荐
- Java 与 Json的互相转换 2
- linux下UTF32和UTF16互相转换代码
- 使用XStream注解实现Java对象与XML互相转换的代码示例---转自:http://www.blogjava.net/bolo
- java对象和json对象之间互相转换
- c# int 转换成string hex方式 16进制
- String 类与char类互相转换 C++ Builder
- jQuery对象和Dom对象互相转换
- 一个简单的json对象和json字符串互相转换的方法
- 在线VB.NET与C#代码互相转换!
- CHAR和HEX互相转换
- python3中bytes与string的互相转换
- UBB/HTML互相转换简单实现源码一览
- 关于json对象与字符串的互相转换
- java对象和json对象之间互相转换
- DataURL与File,Blob,canvas对象之间的互相转换的Javascript
- oracle 11G DG物理备库与快照备库的互相转换
- C++ 最简单的string与wstring互相转换
- 图像与视频互相转换
- json、对象、字符串互相转换
- MFC的CWnd和HWND之间互相转换方法