求IntPtr详细使用方法

吃饭睡觉打小白 2009-12-24 05:36:58
如题
...全文
815 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ProjectDD 2009-12-26
  • 打赏
  • 举报
回复
句柄的意思 查了一下,好象是 一个对象的 操作系统中的 ID是一个整数

我想操作系统肯定会根据这个ID 建立起一套映射,查找这个对象自身的一切资源与其相关性
yingkk 2009-12-26
  • 打赏
  • 举报
回复
自我感觉当某个控件被用来执行一些控件本身不支持的功能的时候就需要提供IntPtr也就是窗口句柄。比如用Panel来显示3D场景, 用Panel来播放电影。
wzhymxz 2009-12-26
  • 打赏
  • 举报
回复
给你一个实际的例子:

[DllImport( "gdi32.dll ")]
public static extern UInt32 SetPixel(IntPtr hdc, int X, int Y, Int32 crColor);
Dobzhansky 2009-12-26
  • 打赏
  • 举报
回复
大多用在跟 .net 底下的 os 平台互作时, 也可以跟其他原生库

下头的(原生的) 给你一个把柄,
以备后来你用这个把柄跟她对话,
她又不想你知道这个把柄到底有什么内涵.

往往是她们的内幕,
这样这个把柄就成了两边的一个信物,
见她如见人.
wzhymxz 2009-12-26
  • 打赏
  • 举报
回复
Intptr一般都是用来与API函数传递参数时或者获取句柄值是使用。
wzhymxz 2009-12-26
  • 打赏
  • 举报
回复
我就画矢量图的时候用这个!其他时候还真没用过!!!
RFEZGC 2009-12-26
  • 打赏
  • 举报
回复
在 win sdk中 所有 void* 类型的(包括被typedef的),结构类型的都 都可以是intptr,相当于sdk中的指针。
ProjectDD 2009-12-24
  • 打赏
  • 举报
回复
学习
  • 打赏
  • 举报
回复
兄台,这些我都找的到哈,支持原创哦
十八道胡同 2009-12-24
  • 打赏
  • 举报
回复
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类型的变量,这样会使程序变得难于理解并容易出错。
真相重于对错 2009-12-24
  • 打赏
  • 举报
回复
msdn

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧