我在自学VC++,句柄的概念让我很感迷茫.在我看了很多资料后我的理解如下,请高人为小弟找找错误.感激不尽!!!程序存储在内存中,所以就有该程序的内存地址.WINDOWS程序自然也是如此.由于种种原因,WINDOWS中的程序的内存地址是存储在一个
32位的变量中.该变量就叫句柄.如果有一个程序窗口,标示该窗口的是"实例句柄"(hInstance),我想改变,添加该窗口的代码,就要
通过该程序窗口的句柄,寻址到该程序所在内存中的位置,然后通过一些定义好了的函数进行操作。
例子:有一程序窗口且其句柄为hInstance1。
有一函数 void F(HANDLE hInstance); 功能是在hInstance标示的窗口中画个圆。
于是执行 F(hinstance1);后该程序窗口中就有了一个圆。
如果执行 F(NULL);在桌面上就会有个圆。
不知道这样理解对不对?
32位的变量中.该变量就叫句柄.如果有一个程序窗口,标示该窗口的是"实例句柄"(hInstance),我想改变,添加该窗口的代码,就要
通过该程序窗口的句柄,寻址到该程序所在内存中的位置,然后通过一些定义好了的函数进行操作。
例子:有一程序窗口且其句柄为hInstance1。
有一函数 void F(HANDLE hInstance); 功能是在hInstance标示的窗口中画个圆。
于是执行 F(hinstance1);后该程序窗口中就有了一个圆。
如果执行 F(NULL);在桌面上就会有个圆。
不知道这样理解对不对?
如果执行 F(NULL);在桌面上就会有个圆。 //除非缺省的窗口是桌面,
{
}void func(HANDLE *handle, ***)
{
struct st //
}
typedef struct _st
{
int dd;
int aa;
} st_t;void func(HANDLE *handle, ***)
{
st_t *st = new st;
*handle = st;
}
就是搭个桥,让你不能直接访问windows类,而要通过句柄,这样你就看不见真正的类里面是怎么搞的了
typedef struct _st
{
int dd;
int aa;
} st_t;st_t st[3];void func_create(HANDLE *handle, ***)
{
*handle = 1; // 当然也可以是2或者3,取决于用户输入的参数
}void func_opt(HANDLE handle, ***) // 句柄操作数据
{
int index = handle;
int temp = st[index].aa; // 操作内部数据
}
handle has its meaning with regard to then-current process.
need to understand per-process handle table.in system-level programming,
call Object Manager component service api
The ObReferenceObjectByHandle routine provides access validation on the object handle, and, if access can be granted, returns the corresponding pointer to the object's body.