IntPtr是什麼,該怎麼用
来源:互联网 发布:矩阵潜袭全扩要买哪些 编辑:程序博客网 时间:2024/06/01 08:20
http://blog.csdn.net/yang_629/article/details/7440115
IntPtr是什麼,該怎麼用
IntPtr用於表示指針或句柄的平台特定類型,此類型對多線程操作是安全的。C#中的IntPtr類型稱為「平台特定的整數類型」,它們用於本機資源,如窗口句柄。資源的大小取決於使用的硬件和操作系統,但其大小總是足以包含系統的指針(因此也可以包含資源的名稱)。 所以,在調用的API函數中一定有類似窗體句柄這樣的參數,那麼當聲明這個函數時,應該將它顯式地聲明為IntPtr類型。
IntPtr 類型被設計成整數,其大小適用於特定平台。即是說,此類型的實例在 32 位硬件和操作系統中將是 32 位,在 64 位硬件和操作系統上將是 64 位。
IntPtr 類型可以由支持指針的語言使用,並可作為在支持與不支持指針的語言間引用數據的一種通用方式。
IntPtr 對象也可用於保持句柄。例如,IntPtr 的實例廣泛地用System.IO.FileStream 類中來保持文件句柄。
IntPtr 類型符合 CLS,而 UIntPtr 類型卻不符合。只有 IntPtr 類型可用在公共語言運行庫中。UIntPtr 類型大多數是提供來維護與 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是什麼,該怎麼用
- IntPtr
- IntPtr
- IntPtr类型
- IntPtr简介
- 初识IntPtr
- 初识IntPtr
- IntPtr介绍
- 初识IntPtr
- 初识IntPtr
- IntPtr类型
- 初识IntPtr
- 初识IntPtr
- 初识IntPtr
- IntPtr to String or String to IntPtr IntPtr stringPointer
- C#中的IntPtr使用
- C#中的IntPtr类型
- 关于IntPtr的资料
- Longest Substring Without Repeating Characters
- Application.mk中APP_ABI 的含义
- 利用shell脚本来监控linux系统的负载与CPU占用情况
- 理解矩阵(二)
- OpenCore
- IntPtr是什麼,該怎麼用
- 在ArcGIS Desktop 中导入 Arcpy
- MySQL存储过程详解
- wzplayer for android V1.5.3 (新增YUV文件播放)
- mule配置基础
- 在MSChart中不显示图例标题
- jsp中取得当前时间
- boost中的智能指针shared_ptr的指针管理
- C语言strrev函数