是一个常量句柄真的常量
Is a const HANDLE really const?
据我所知,HANDLE只是一个数字,指的是某种"系统资源表"。这个句柄常量正确吗?我想不是因为它只是用于访问像数组上的索引这样的表。位图示例:如果 HBITMAP 声明为 const,是否可以更改位图的内容?
HANDLE 是 (AFAIR) int 的 typedef,因此 const HBITMAP 与 const int 相同。
从这个意义上说,即使位图的句柄是 const,您也可以更改位图的内容,因为 const 引用句柄而不是实际位图(将其视为指向变量类的 const 指针)。
但:
无论如何,您的问题都没有实际意义,因为:
- 句柄是 Win32 API 的一项功能,它是一个 C API 而不是C++(并且在 C 获得 const 之前创建)。
- 无论如何,您都不能直接更改位图(或由句柄表示的任何其他"对象")。句柄是对 Win32 结构的不透明引用,只能通过用于处理(无双关语)"对象"的相应 Win32 API 调用进行操作。
我将"对象"放在引号中,因为句柄指的是概念对象(概念的软件表示形式),而不是实际的C++对象,同样是因为 Win32 是 C API。
相关文章:
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 如何获取边缘窗口句柄 (HWND)?
- 枚举进程模块在有效句柄上返回无效句柄
- 在 c/c++ 中打开 PhysicalDrive 的句柄并写入 MBR 的 linux 等效是什么?
- 从运行服务的应用程序代码中提取窗口句柄
- 在读取文件后重置句柄
- 是否有像地图这样的C++结构,但我得到的不是值的键,而是值的句柄?
- Microsoft ODBC 无法创建有效的句柄
- 我是否可以使用 win32 句柄以编程方式记录发送到/接收到 USB/COM 的内容
- 获取特定进程的句柄数
- C++ 创建 NdisProt 驱动程序的句柄
- 是否需要关闭来自 WinHTTP 异步的句柄?
- 句柄OK全部崩溃
- 我需要通过窗口句柄(HWND)获取文件,我该怎么办?
- 什么是 C# 等同于C++句柄
- 未知C++错误:致命错误:glibc检测到无效的stdio句柄
- 获取现有进程句柄
- GetModuleHandle() 无法检索由 "notepad.exe" 加载的"advapi32.dll"的句柄
- 如何为句柄类提供运算符 -> 的常量版本
- 是一个常量句柄真的常量