关于IntPtr的资料
来源:互联网 发布:淘宝俄罗斯代购靠谱吗 编辑:程序博客网 时间:2024/04/28 18:16
用于表示指针或句柄的平台特定类型。
有关此类型所有成员的列表,请参阅 IntPtr 成员。
System.Object
System.ValueType
System.IntPtr
线程安全
此类型对多线程操作是安全的。
备注
IntPtr 类型被设计成整数,其大小适用于特定平台。即是说,此类型的实例在 32 位硬件和操作系统中将是 32 位,在 64 位硬件和操作系统上将是 64 位。
IntPtr 类型可以由支持指针的语言使用,并可作为在支持与不支持指针的语言间引用数据的一种通用方式。
IntPtr 对象也可用于保持句柄。例如,IntPtr 的实例广泛地用在 System.IO.FileStream 类中来保持文件句柄。
IntPtr 类型符合 CLS,而 UIntPtr 类型却不符合。只有 IntPtr 类型可用在公共语言运行库中。UIntPtr 类型大多数是提供来维护与 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类型的变量,这样会使程序变得难于理解并容易出错。
以上文字仅作参考。
- 关于IntPtr的资料
- 关于C#中的IntPtr
- IntPtr
- IntPtr
- C#中IntPtr的使用
- C# 的IntPtr 是什么东西?
- 关于jetty的资料
- 关于outlookbar的资料
- 关于Lucene的资料
- 关于内存的资料
- 关于flex的资料
- 关于android的资料
- 关于flex的资料
- 关于flex的资料
- 关于BreakPad的资料
- 关于 flex 的资料
- 关于标定的资料
- 关于刻度尺的资料
- SharePoint Designer工作流的扩展
- JAVA回收机制中关于finalize的处理
- JQuery和.NET如何结合工作
- 甲骨文拟收购软件厂商GoldenGate
- 开机的提示错误 "S.M.A.R.T Status BAD"
- 关于IntPtr的资料
- Set Off
- 找不到atlapp.h的解決方法
- 啥东西啊
- Windows是如何在注册表里记录盘符分配的
- C++开发常用工具
- Apache Rewrite 规则详解(二)
- SQLserver忘记sa密码修改方法
- S3C2410 DMA 详解