Windows下C++對象,句柄,系統對象(資源)的關係

系統對象

  • 今天看到一個非常精闢的話進行分享

The system provides three categories of objects: user, graphics device interface (GDI), and kernel.
譯:Windows 創建了三種主要類型的對象:用戶對象,GDI對象,還有內核對象
by: https://docs.microsoft.com/zh-cn/windows/desktop/SysInfo/object-categories

句柄

  • 句柄Handle(在Windows編程中通常定義爲HANDLE),顧名思義句柄即把柄,抓住了把柄,你就能操縱它,Window系統很高冷,你抓住了它的把柄,你就能控制系統資源。😄,這樣說還是有道理的,應用程序直接訪問Windows的系統資源是不可能的,資源這種東西本來就不安全,所以Windows API提供了句柄來給我們安全訪問系統資源(通常由一個創建系統對象的API返回)。前面好像說混了,系統資源也可以叫做系統對象吧。

An object is a data structure that represents a system resource, such as a file, thread, or graphic image. An application cannot directly access object data or the system resource that an object represents. Instead, an application must obtain an object handle, which it can use to examine or modify the system resource. Each handle has an entry in an internally maintained table. These entries contain the addresses of the resources and the means to identify the resource type.
對象是表示系統資源的數據結構,例如文件,線程或圖形圖像。應用程序無法直接訪問對象數據或對象表示的系統資源。相反,應用程序必須獲取一個對象句柄,它可以用來檢查或修改系統資源。每個句柄在內部維護的表中都有一個條目。這些條目包含資源的地址和標識資源類型的方法。

C++資源

  • 這裏的C++資源泛指對Window API進行封裝的第三方庫,純Windows API編程固然高效,但也蛋疼,因爲WindowsAPI實在是太複雜了。所以就有了很多封裝庫,其中比較有名的就是MFC和QT了。這裏以MFC爲例,MFC的類封裝了系統對象(前面說的那種對象),使得我們能面向對象地進行Windows編程.。MFC中有一個非常有名的函數attach,將MFC中的C++對象(通常這些類以C開頭)和系統對象關聯起來(其實就是將句柄傳給C++對象😂別拆穿)。
  • 所以我個人覺得,要做微軟的第三方庫,首先要解決的問題是如何獲得Windows的系統對象,或者說如何封好WindowAPI的句柄。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章