散分,句柄问题

devzhao 2003-04-09 06:05:07
1、什么是句柄?
2、为什么要用句柄?
3、怎样实现句柄?
4、如何利用句柄?
...全文
35 14 打赏 收藏 转发到动态 举报
写回复
用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

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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