那位大虾来讲一讲句柄阿!!我不懂啊!!不好意思!!新来得菜鸟!!

解决方案 »

  1.   

    简单的说,句柄是一个32位整形值,用来唯一标识一个windows对象,是对象的间接引用。可以通过它对对象进行访问。更准确的说,句柄是和对象一一对应的值。对象可以映射到唯一的句柄,句柄也能够映射到唯一的对象。我们常用对象的指针也可以对对象进行访问,但是之所以要出现句柄,是有一定道理的。很多windows API函数都是返回的对象句柄,而不是指针,特别是有关内核对象的API,因为虽然句柄和指针虽然都可以对对象进行访问,但是句柄更安全,不会发生类似指针未初始化,越界等。
    另外,对于内核对象,创建一般只返回它的句柄,而不是指针,而且系统一般都会维护其句柄表,但是它的结构是不对外公开。为了保证句柄能够完成信息隐藏的任务,对象和句柄之间的映射没有文档记载,不保证固定不变,而且仅有微软知道这种映射,或者还有少数系统级工具的开发商知道。一般句柄能够通过attach和一个对象绑定,detatch取消绑定。另外关于对象句柄和对象指针间的关系,可以用
    CObject * myobj; 
    HANDLE myhandle;
    myobj=FromHandle(myhandle);
    myhandle=myobj.GetSafeHwnd();
    进行互相转换呵呵,以上是我的理解
      

  2.   

    恩,楼上说的不错,很透彻。/////////
    补充以下,
    FromeHandle得到的是临时对象,系统不保证它在以后(所在函数结束后)有效。实际上在程序空闲时间,这些临时对象将被撤销。因此要尽量避免临时对象指针不要传到其他函数中。可以用attack从一个句柄得到对象。
    CWnd wnd;
    wnd.Attach(hwnd);
    但是使用对象之后要记得wnd.Detatch()。