小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

句柄到底是什么意思?!

 chuanshaoke 2010-04-21
  • 就是一個指針   
    在32位windows中占用4個字節(jié)   
    它指向內(nèi)存的尺寸由它的類型決定   
    函數(shù)用句柄來傳遞數(shù)據(jù)
 
  • 句柄在winnt.h中是這么定義的:   
      #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   
        
        STRICT修飾符的意思是變量類型是否要求嚴(yán)格定義。在這里,我們可以看到HANDLE其實(shí)就是一個void類型的指針。這樣有什么用呢?學(xué)過c/c++語言的人都知道,void類型的指針可以通過強(qiáng)制類型轉(zhuǎn)換變?yōu)槿魏晤愋偷闹羔?,使用最靈活。   
        
        在很多情況下,句柄是一個對象的指針,或者說是地址,一個對象的地址。比如對于分配的一個內(nèi)存塊(對象),它的句柄就是它的首地址,這沒什么問題。   
        
        但是這并不總是成立的,對于沒有對象意義的句柄尤其如此。這就取決與系統(tǒng)的定義了。比如系統(tǒng)鉤子的類型HHOOK,說它是地址就沒有任何意義。對于窗口句柄也是如此。在這些情況下,我們可以把句柄理解為某事物在系統(tǒng)該類事物列表中的ID。   
        
    是不是加點(diǎn)分呀?我從來沒回答過50分以下的題目。:)

 

  • 句柄是對象的索引,這樣隱藏了危險的地址信息,同時也使系統(tǒng)對象和應(yīng)用程序隔離。

 

  • 句柄,你可以把他想象成一個把子,讓別人來拎的把子.至于怎么來拎,是操作系統(tǒng)的事情   
        
    句柄不是指針,作為內(nèi)核對象他是系統(tǒng)一個內(nèi)核對象指針的索引.可以間接的認(rèn)為他是指針的指針.   
        
     呵呵,說不清楚,關(guān)鍵是不同的句柄,有不同的處理方法   
        
    你需要知道的是如何得到一個句柄,然后保存他,在需要的地方把他作為參數(shù)傳給函數(shù)就可以了,具體是什么其實(shí)不需要知道:)

 

  • 在32位Windows中,“句柄不是指針”這句話已經(jīng)不再成立了,比如GlobalAlloc()等內(nèi)存分配函數(shù)返回的句柄實(shí)際就是該內(nèi)存的地址。因此才不需要使用GlobalLock()來鎖定句柄以得到地址。這些東西n年以前在MSDN中就說明了。   
        
        事實(shí)上,有實(shí)際對象意義的東西(占用一段存儲器),比如上面說的內(nèi)存的句柄基本就是地址。其它沒有對象意義的東西是系統(tǒng)索引。這些你只要看看Windows的那幾個頭文件就能理解了。   
        
        說句題外話,如果沒有看過Windows標(biāo)準(zhǔn)頭文件和MFC源程序就不能算是真正的Windows程序員。撐死是一個合格的c/c++程序員。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多