社区
C语言
帖子详情
散分,句柄问题
devzhao
2003-04-09 06:05:07
1、什么是句柄?
2、为什么要用句柄?
3、怎样实现句柄?
4、如何利用句柄?
...全文
103
14
打赏
收藏
散分,句柄问题
1、什么是句柄? 2、为什么要用句柄? 3、怎样实现句柄? 4、如何利用句柄?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wshcdr
2003-04-11
打赏
举报
回复
就回答第一个句柄代表资源吧
比如位图,
andyfr1210
2003-04-10
打赏
举报
回复
我认为句柄其实就是指针,其目的是也就是为了封装。
THINKING IN C++中有说明。通常一个结构的声明要在头文件中,可是头文件大家都看得见,
为了隐藏这个结构里的声明,可以通过句柄,把其放入定义文件中。
devzhao
2003-04-10
打赏
举报
回复
我想问的是C++类的句柄,如给定一个类如何构造绑定该类的句柄
whupyf
2003-04-09
打赏
举报
回复
只知道每个窗口都对应唯一的句柄.
robin97
2003-04-09
打赏
举报
回复
有一点可以达到:编程的参数统一了
BlueSky2008
2003-04-09
打赏
举报
回复
1、什么是句柄? Mocrosoft说这个32位值叫**句柄,他就是句柄
2、为什么要用句柄?没有他,你就用不起来Mocrosoft给你的API和内裤。
3、怎样实现句柄? 只有Mocrosoft知道。
4、如何利用句柄? 一般用Create...得到,然后在所有需要的地方填上去。
oyd
2003-04-09
打赏
举报
回复
HWND不就是整数吗?整数与指针有区别吗?
#include <stdio.h>
void func()
{
printf("Hello world!");
}
void main()
{
void (*pvoid)();
int (*pint)();
int a;
pvoid=func;
(pvoid)();
pint=(int (*)())func;
(pint)();
a=(int)func;
//不明白这儿用什么语句才能调用
}
luyiping
2003-04-09
打赏
举报
回复
我想所谓句柄就是能唯一标示对象的参数吧
wyqiang
2003-04-09
打赏
举报
回复
我想我是知道句别
就是用来传数的哪个
sea_lover
2003-04-09
打赏
举报
回复
你可以看看《深度探索C++对象模型》中对句柄类的一些说法!
yyfzy
2003-04-09
打赏
举报
回复
UP&&学习
lcftc
2003-04-09
打赏
举报
回复
受M$的帮助文档以及很多Windows编程书籍的影响,大家对局柄比较普遍的认识是:句柄是一个整数,用以标识Windows对象,句柄不是一个指针……
而实际上,这些不过是M$进行数据封装的幌子而已,下面我们一起来分析一下HANDLE到底是什么。
请先到Windef.h找绝大多数句柄的定义:
DECLARE_HANDLE(HWND);
DECLARE_HANDLE(HHOOK);
……
DECLARE_HANDLE(HGDIOBJ);
DECLARE_HANDLE(HBITMAP);
DECLARE_HANDLE(HBRUSH);
……
typedef HANDLE HGLOBAL;
typedef HANDLE HLOCAL;
……
OK, 现在大家跟我一起翻到Winnt.h,看看DECLARE_HANDLE和HANDLE到底是什么:
#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef
struct name##__ *name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
typedef HANDLE *PHANDLE;
哈哈,现在知道了吧,HANDLE就是PVOID,也就是无类型指针,
而DECLARE_HANDLE(HWND);就是:
struct HWND__ {
int unused;};
typedef struct HWND__ *HWND;
现在实际上都清楚啦,这些Handles都不过是指向struct的指针,至于这个struct的用处,连M$都说unused了,^o^
现在解释下M$这么做的意义,这就是所谓数据封装,你可以在你的程序中把M$的内部结构指针传来传去,可是你却不知道它到底指向的内容是什么,而且可以编个句柄的瞎话防止大家的质疑:)。而M$的程序大可以这么写:
#include <windows.h> //这个和大家用的一样
#include "windows_in.h" //这个是M$自用的,外人别想看到^o^
HSOMETHINGELSE DoSomething(HSOMETHING hSomething) {
struct RealSomething* p = (struct RealSomething*)hSomething;
//先强制类型转换成内部结构指针
……do something……
return (HSOMETHINGELSE)pRealSomethingElse;//强制类型逆转换
}
doer_ljy
2003-04-09
打赏
举报
回复
不知道!
这应该是标准答案吧!:)
bugfree
2003-04-09
打赏
举报
回复
看看这个:
http://www.parashift.com/c++-faq-lite/references.html#faq-8.7
什么是
句柄
,
句柄
有什么作用
本文介绍了Windows编程中的
句柄
概念,通过图解方式阐述其作为对象标识符的原理。
句柄
是一个32位无符号整型值,用于指向内存中对象的地址,即使对象在内存中位置变化,
句柄
保持不变,确保程序能准确访问。
句柄
在程序的单次运行中是唯一的、不可变的,由系统分配且只读。通过
句柄
,程序员可以调用系统API,但不能直接操作对象。文章适合初学者,旨在提供一个直观的理解途径。
句柄
详解,什么是
句柄
?
句柄
有什么用?
本文面向初学者介绍Windows
句柄
。因Windows以虚拟内存为基础,对象内存地址会变,为准确访问对象引入
句柄
。
句柄
数值上是32位无符号整型值,逻辑上像指针的指针,是对象唯一固定ID。还交代了
句柄
在程序运行、属性、大小等方面的关键细节。
句柄
泄露
问题
追踪
本文主要阐述Windows
句柄
泄露追踪方法。在Windows开发中,调用API后未关闭
句柄
会导致泄露,影响程序运行。介绍了用Process Explorer定位
句柄
泄露,虽能解决部分
问题
但有局限;还介绍了用Windbg定位,可找出泄露
句柄
申请处,也提及在客户环境中使用的注意事项。
5
句柄
表
本文深入解析Windows内核中
句柄
表的设计机制,包括进程私有
句柄
表结构(_HANDLE_TABLE)、表项布局(8字节分四段:标志位、访问掩码、属性及对象地址)、OBJECT_HEADER头偏移
问题
,以及全局
句柄
表(PspCidTable)的多级页式组织方式。重点说明如何通过Windbg结合EPROCESS定位
句柄
表、利用
句柄
索引公式计算对象地址,并阐述其在反调试与进程枚举中的实战应用。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章