用c ++处理对象

som*_*guy 3 c++ winapi handle void-pointers

我被告知句柄是一种"无效"指针.但究竟什么"无效指针"意味着什么,它的目的是什么.还有什么"somehandle = GetStdHandle(STD_INPUT_HANDLE);呢?

Jon*_*Jon 11

一般意义上的句柄是唯一标识对象的不透明值.在此上下文中,"opaque"表示分发句柄的实体(例如窗口管理器)知道句柄如何映射到对象,但使用句柄的实体(例如您的代码)却不知道.

这样做是为了除非涉及提供者,否则他们无法获得真实对象,这允许提供者确保没有人弄乱它背后拥有的对象.

由于它非常实用,因此句柄传统上是整数类型,或者void*因为使用原语在C中比其他任何东西都容易得多.特别是,在Win32 API中有很多的功能,接受或返回的句柄(这些#defined用不同的名字:HANDLE,HKEY,许多其他的).所有这些类型都映射到void*.

更新:

要回答第二个问题(虽然可能会更好地提出并自行回答):

GetStdHandle(STD_INPUT_HANDLE) 返回标准输入设备的句柄.您可以使用此句柄读取流程的标准输入.