句柄與指針的區別

句柄實際上是一種指向某種資源的指針,但與指針又有所不同:指針對應著一個數據在內存中的地址,得到了指針就可以自由地修改該數據。

Windows并不希望一般程序修改其內部數據結構,因為這樣太不安全。所以Windows給每個使用GlobalAlloc等函數聲明的內存區域指定一個句柄(本質上仍是一個指針,但不要直接操作它),平時你只是在調用API函數時利用這個句柄來說明要操作哪段內存。當你需要對某個內存進行直接操作時,可以使用GlobalLock鎖住這段內存并獲得指針來直接進行操作。??

?

“句柄”(handle),handle的本意是把柄,把手的意思。是你與操作系統打交道的東西。舉個例子:比如你做了虧心事(我說的是比如,呵呵),不幸讓我抓住了把柄,那么我讓你做什么你就得做什么,因為你的把柄在我這。

我們編程的時候也是這樣,比如我們要想操縱一個窗口,那我們就必須“抓住它的把柄”,只有這樣,我們才能改變它的屬性,改變它的式樣,甚至銷毀它(狠了點兒)。

我們再引用一個通俗一點的例子,比如你考上了大學,入學后,學校(操作系統)會給你一個學生證號。注意,這個號碼是學校指定的,你無法自選。有了這個號碼(學生證,假設一證多用)就可以享受學校提供的服務:如你就可以去圖書館借書,去食堂吃飯,去教室上課等等。但你不能到食堂里買啤酒,因為學校不允許這種服務。

而在計算機中系統提供的服務就是API調用,你有了HANDLE,就可以理直氣壯地向系統提出調用API的服務。而指針的權力就大多了,有了指針你可以到處去喝酒,打架,學校(操作系統)管不著,所以句柄和指針的區別在于句柄只能調用系統提供的服務。而句柄雖然是一個能相互區別的號碼,但與我們普通的ID號又有區別,普通的ID號是可以由程序員自己定義的,而句柄不行,它是對象生成時系統指定的,是為了區別系統中存在的各個對象,這個句柄不是由程序員賦給的。實際應用中,最常用的就是文件句柄和窗口句柄。例如,窗口句柄的值是一個長整數,每個窗體都用一個句柄來表示。所以句柄是不會重復的,很多的函數都會用到窗體的句柄。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458416.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS 11 適配

http://blog.csdn.net/st646889325/article/details/79066361 這一個不錯的文章

談談自己對于Auth2.0的見解

Auth的原理網上有很多,我這里就不在贅述了。 這里有張時序圖我個人覺得是比較合理而且直觀的,(感謝這篇博文:http://justcoding.iteye.com/blog/1950270) 參照這個流程,模擬了下部分代碼,當然是…

某個時間點 幾天后

1、某個時間點 3天后 NSDate *maxDate [NSDate dateWithTimeInterval:3 * 24 * 60 * 60 sinceDate:date];//3天后 2、現在 3天后 NSDate *minDate [[NSDate date] initWithTimeIntervalSinceNow:3 * 24 * 60 * 60];

iPad開發--QQ空間,處理橫豎屏布局,實現子控件中的代理

一.主界面橫豎屏效果圖 二.主界面加載, 初始化Dock(紅色框的控件),判斷程序啟動時的屏幕方向.調用自己- (void)transitionToLandScape:(BOOL)isLandScape;方法,通知子控件屏幕方向改變,將此事件一直傳遞下去程序運行過程中屏幕方向改變會調用- (void)viewWillTransitionToSize:…

C++ Vector 匯總

C vector erase函數最近使用了順序容器的刪除元素操作,特此記錄下該函數的注意事項。 在Cprimer中對c.erase(p) 這樣解釋的:c.erase(p) 刪除迭代器p所指向的元素,返回一個指向被刪元素之后元素的迭代器,若p指向尾元素&#xff…

vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼

繼上次”vNext之旅(1):從概念和基礎開始”之后再次學習vNext重新遇到了弄不懂的事情,花了一些時間學習,今天來分享一下,為后人節省些時間。起因 在用vNext造輪子——框架的時候引入“Microsoft.Dnx.Runtime…

C++中模板使用詳解

轉自:http://www.360doc.com/content/09/0403/17/799_3011262.shtml 1. 模板的概念。 我們已經學過重載(Overloading),對重載函數而言,C的檢查機制能通過函數參數的不同及所屬類的不同。正確的調用重載函數。例如,為求兩個數的最大值&#xf…

騰訊2016春招安全崗筆試題解析

騰訊2016春招安全崗筆試題解析 昨天(4月2日)晚上7:00到9:00做了騰訊春招安全崗的筆試題。下面解析一下: 題目解析 1 在生成隨機數前用當前時間設置隨機數種子應該是安全的。如果程序用固定的數產生隨機數,其結果也是固定的。如果用…

網絡請求數據解析時,判斷數據是否為空

//判斷是否為空 (BOOL)IsStringEmptyOrNull:(NSString *)str { if (!str) { // null object return true; }else if (str nil){ return true; }else { if ([str isKindOfClass:[NSNull class]]) { return true; …

VS項目屬性的一些配置項的總結(持續增加。。。)

首先,解決方案和項目文件夾包含關系(c項目): VS解決方案和各個項目文件夾以及解決方案和各個項目對應的配置文件包含關系:假設新建一個項目ssyy,解決方案起名fangan,注意解決方案包括項目,此時生成的最外層…

shell編程中date用法(轉)

原文地址:http://blog.sina.com.cn/s/blog_61c006ea0100mgxe.html 1、date --help %% 輸出%符號 a literal % %a 當前域的星期縮寫 locale’s abbreviated weekday name (Sun..Sat) %A 當前域的星期全寫 locale’s full weekday name, variable length (Sunday..Saturday) %b 當…

linux下搭建FTP服務器

LINUX FTP簡單配置 FTP配置1、#vi /etc/vsftp/vsftpd.conf #主要配置幾個關鍵的就可以 anonymous_enableNO #拒絕匿名訪問 chroot_local_userYES #鎖定用戶目錄&#xff0c…

微信正則表達式 iOS

#pragma mark - 微信號的正則表達式 微信賬號僅支持6-20個字母、數字、下劃線或減號,以字母開頭 (BOOL)isWxNumber:(NSString *)WXNum{ NSString *passWordRegex "^[a-zA-Z][a-zA-Z0-9_-]{5,19}$"; NSPredicate *passWordPredicate [NSPredica…

子元素增加margin-top會增加給父元素的問題

假設我們有如下代碼 <div id"father" style"height:400px;width:400px;background:#e4393c;">     <div id"child" style"background:green;height:100px;width:100px;margin-top:40px;"></div>   </div&g…

Python 關鍵字

from&#xff1a;https://blog.csdn.net/liang19890820/article/details/68488392簡述 關鍵字是預先保留的標識符&#xff0c;每個關鍵字都有特殊的含義。編程語言眾多&#xff0c;但每種語言都有相應的關鍵字&#xff0c;Python 也不例外&#xff0c;它自帶了一個 keyword 模塊…

Zend Studio使用教程之升級Zend Studio(1/3)

2019獨角獸企業重金招聘Python工程師標準>>> Zend Studio是新一代的專業級智能PHP IDE&#xff0c;它旨在幫助開發人員提高工作效率&#xff0c;創造出高品質的PHP應用程序&#xff01;它包含了PHP開發所必須的部件&#xff0c;通過一整套的編輯、調試、分析、優化和…

身份證正則表達式

#pragma mark - 身份證的正則表達式 (BOOL)checkUserID:(NSString *)userID { //長度不為18的都排除掉 if (userID.length!18) { return NO; } //校驗格式 NSString *regex2 "^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d…

java中可重入鎖的學習總結

2019獨角獸企業重金招聘Python工程師標準>>> 經常看到網上的人說&#xff0c;可重入鎖一詞&#xff0c;但是總是沒怎么了解&#xff0c;到底什么是可重入鎖&#xff0c;一直是一個模糊的概念&#xff0c;下面來大致總結一下。 可重入鎖&#xff1a;指的是同一個線程…

Oracle DB優化

http://www.jb51.net/article/77876.htm http://www.jb51.net/article/56881.htm http://danni505.blog.51cto.com/15547/1163711/ http://blog.csdn.net/giianhui/article/details/8172786轉載于:https://www.cnblogs.com/diyunpeng/p/5132392.html

設置View單個圓角

#pragma mark - 設置View單個圓角 (void)addCornerWithView:(UIView *)aView type:(UIRectCorner)aCorners size:(CGSize)aSize { // 根據矩形畫帶圓角的曲線 UIBezierPath *maskPath [UIBezierPath bezierPathWithRoundedRect:aView.bounds byRoundingCorners:aCorn…