C++ 在c+中处理对象+;

C++ 在c+中处理对象+;,c++,winapi,handle,void-pointers,C++,Winapi,Handle,Void Pointers,我听说句柄是一种“void”指针。但“void pointer”到底意味着什么?它的目的是什么。另外,somehandle=GetStdHandle(STD_INPUT_HANDLE)do做什么?AHANDLE是指向指针的指针,就这么简单 因此,要获得指向数据的指针,必须首先取消对它的引用 GetStdHandle(STD\u-INPUT\u-HANDLE)将把句柄返回到stdin流-标准输入。如果使用“a WindowsHANDLE从命令提示符调用,那么它就是控制台或文件/流,实际上是一个空指

我听说句柄是一种“void”指针。但“void pointer”到底意味着什么?它的目的是什么。另外,somehandle=GetStdHandle(STD_INPUT_HANDLE)do做什么?

A
HANDLE
是指向指针的指针,就这么简单

因此,要获得指向数据的指针,必须首先取消对它的引用


GetStdHandle(STD\u-INPUT\u-HANDLE)
将把句柄返回到stdin流-标准输入。如果使用“a Windows
HANDLE
从命令提示符调用,那么它就是控制台或文件/流,实际上是一个空指针数组的索引,以及其他一些东西。空指针(
void*
)是指向未知类型的指针,在C++中应该不惜一切代价避免使用它-但是Windows API与C兼容,并使用它来避免暴露Windows内部类型


GetStdHandle(STD\u INPUT\u HANDLE)
表示获取与标准输出流关联的
句柄。

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

这样做的目的是,除非提供者参与进来,否则他们无法获得真实的对象,这使得提供者能够确保没有人在背后捣乱它所拥有的对象

由于它非常实用,句柄传统上是整数类型或
void*
,因为在C中使用原语比其他任何东西都容易得多。特别是Win32 API中的许多函数都接受或返回句柄(它们是
#用各种名称定义
HANDLE
HKEY
,许多其他名称)。所有这些类型都映射到
void*

更新:

要回答第二个问题(尽管单独提问和回答可能更好):


GetStdHandle(标准输入句柄)
。您可以使用此句柄读取流程的标准输入。

句柄不一定是指针或双指针,它可能是OS表中的索引以及其他任何内容。为了方便起见,将其定义为
void*
,因为它通常被用作指针,而且在C
void*
中也经常被用作指针>是一种几乎不能执行任何操作的类型


关键的一点是,您必须将其视为代表操作系统管理的资源的某种不透明令牌;将其传递给适当的函数,您会告诉它们对此类对象进行操作“,您不应该更改它或尝试取消引用它:只需将它与可以使用它的函数一起使用。

您指的是Windows API
句柄
,而不是一般的句柄?好的。那么,在前面的答案中,指向指针的指针是什么意思呢?
HANDLE
的要点在于它不是任何数组的索引。它只是一个不透明的pimpl类型。是的,今天使用的底层实现可能是已知的,但明天可能会完全改变。好的。因为我一直在做一些键盘和鼠标输入类型的事情,但在不知道手柄是什么的情况下,我感觉有点失落。因此,它本质上是一个指向只有窗口知道的东西的值?你的意思是,标准输入流。嗯。那它是不是用作参考点呢?为了让函数可以任意操作和使用?句柄在winnt.h中定义为void*,而不是指针的指针。好的,谢谢。这更有道理。因此,它几乎是一个空点。在一般意义上,句柄是一个不透明的标识符。因此,
句柄
(特定情况)绝对不应该被认为是指向任何东西的指针,因为C语言对“指针”的定义是正确的。因为我一直在做一些键盘和鼠标输入类型的事情,但在不知道手柄是什么的情况下,我感觉有点失落。因此,它本质上是一个指向只有窗口知道的东西的值?那么它是否被用作参考点?函数是否可以任意操作和使用?确定。因为我一直在做一些键盘和鼠标输入类型的事情,但在不知道手柄是什么的情况下,我感觉有点失落。因此,这是一个本质上指向只有窗口知道的东西的值?好答案。我只想补充一点,它们映射到
void*
的事实就是它们在某些版本的Windows中的实现方式。它可能会在以后的版本中发生变化(尽管可能不会),但这并不重要。您应该将
句柄
类型简单地看作是一个唯一标识符,并将其保留。你不应该知道关于他们的任何其他事情。那么这是作为参考点吗?函数是否可以随意操作和使用?@someguy:it“指向”只有内核(窗口管理器是其中的一个子系统)才知道如何访问的东西。我更喜欢动词“identifies”而不是“points to”,因为当谈到C时,“point”是一个具有强烈内涵的词。
句柄实际上是一个指针,但是这样使用它违背了我们首先遇到这个问题的原因。不要这样做,只是为了澄清它有什么不同,我使用C++。