【CSharp】int类型与IntPtr类型之间的转换
1.背景
.NET提供了一个结构体System.IntPtr专门用来代表句柄或指针。
IntPtr 结构,表示一个带符号整数,其中位宽度与指针相同。
注解
类型 IntPtr 设计为一个整数,其大小与指针相同。 也就是说,此类型的实例应在 32 位进程中为 32 位,在 64 位进程中为 64 位。
支持 IntPtr 指针的语言可以使用 类型,并作为在支持和不支持指针的语言之间引用数据的常用方法。
IntPtr 对象还可用于保存句柄。 例如, 的 IntPtr 实例在 类中 System.IO.FileStream 广泛使用,用于保存文件句柄。
2.int转IntPtr接口
需要用到的接口1:
Marshal.AllocHGlobal(int cb) :从进程的非托管内存中分配内存。
来自命名空间:System.Runtime.InteropServices.
参数是Int32/或指向Int32的指针,表示内存中所需的字节数。
返回IntPtr,表示指向新分配的内存的指针。
注意必须使用 FreeHGlobal(IntPtr) 方法释放该IntPtr指向的内存Marshal.FreeHGlobal( IntPtr hglobal);。
| AllocHGlobal(Int32) | 通过使用指定的字节数,从进程的非托管内存中分配内存。 | public static IntPtr AllocHGlobal (int |
|---|
本文介绍了在C#中如何进行int类型与IntPtr类型的转换,包括Marshal.AllocHGlobal方法用于int转IntPtr,以及Marshal.ReadInt32方法用于IntPtr转int。这些转换在处理非托管内存和句柄时非常有用。文章提供了详细的接口解释和使用示例。
订阅专栏 解锁全文
429

被折叠的 条评论
为什么被折叠?



