社区
C语言
帖子详情
散分,句柄问题
devzhao
2003-04-09 06:05:07
1、什么是句柄?
2、为什么要用句柄?
3、怎样实现句柄?
4、如何利用句柄?
...全文
120
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编程,决定趁此机会将
句柄
彻底搞清楚。查阅了一些网络上的资料,发现网络上的讲解大概可以分为两类:一种是以比喻、类比的方式说明,这种方法虽然形象易懂,但并没有从原理上、本质上加以揭示,让人仍然想问“为什么?”、“怎么实现?”。另一种是给出源代码,无可厚非,这当然是最本质的说明了,但这样一来,又显得不够直观,初学者理解起来有一定的难度。鉴于此,在下尽微末之能,结合自己的愚见,在两者之间折中,用图解的方式来将原理呈现出来,做到一目了然。 这里
句柄
详解,什么是
句柄
?
句柄
有什么用?
最近在做项目时遇到了
句柄
的概念,之前只知道在编译原理里有
句柄
的概念,在实际的编程时会经常用到
句柄
。 参考地址:https://www.cnblogs.com/zpcdbky/p/4652151.html 这里需要说明: 1.这里将
句柄
所能标识的所有东西(如窗口、文件、画笔等)统称为“对象”。 2.图中一个小横框表示一定大小的内存区域,并不代表一个字节,如标有0X00000AC6的横框表示4...
句柄
泄露
问题
追踪
无论是在编写Windows程序还是Linux程序,都可能存在
句柄
泄露的
问题
。在Linux中一般来说一个进程的fd使用是有上限的,可以使用ulimit命令进行上限查看,当出现fd泄露的时候,可能会出现socket创建失败,文件打不开等
问题
。Windows类似,本文主要阐述了对Windows中的
句柄
泄露的追踪方法。 Windows
句柄
泄露 在Windows开发中,当调用Windows API,比如CreateFile, CreateEvent, CreateThread 等API的时候,都会返回一个
句柄
Hand
什么是
句柄
,如何获取
句柄
句柄
是一个用来标识对象或者项目的标识符,它可以是一个整数、指针或其他数据类型,用于在操作系统或应用程序中唯一地标识某个对象。这些对象可以包括窗口、文件、进程、控件、位图、GDI对象(如画笔、画刷等)等。
句柄
的引入主要是为了解决内存管理机制中虚拟地址变动的
问题
,使得系统能够记录和管理数据地址的变更。
5
句柄
表
当一个进程创建或者打开一个内核对象,都会获得一个
句柄
,通过
句柄
我们可以访问到内核对象,,并不是我们之前所了解的窗口之类的3环
句柄
。
句柄
的存在是为了避免在应用层直接修改内核对象,如果你创建一个线程,随之返回给你内核对象的地址,你就可以通过这个地址去修改内核对象,。为了规避以上所述的情况,微软将内核对象的地址隐藏起来,但为了让3环可以使用,又设计了一张表(即
句柄
表),在这个表中存储着内核对象的地址,,这样在3环中就可以通过
句柄
来使用内核对象。
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章