c++ - 为什么 MAKEINTRESOURCE() 有效?

标签 c++ c windows winapi

宏定义为:

#define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i))))
#define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))

为什么这可以用来指示资源 ID(16 位无符号整数)或资源名称(指向 char 数组的指针)? 这不会有效地将地址空间(在 32 位系统上)限制为 16 位吗?否则系统怎么知道我用的是ID还是名字?

最佳答案

这是因为 Windows 不允许为地址空间的前 64 KB 映射页面。捕获空指针引用。但我也想在从 16 位版本的 Windows 转换的程序中捕获指针错误。

一个副作用是,这允许可靠地区分打包到指针值中的资源 ID,因为它们总是指向不可映射的内存。

关于c++ - 为什么 MAKEINTRESOURCE() 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3610565/

相关文章:

c - 同类指针的区别

c++ - 在 3d View 中动态渲染 2d 板

c++ - 在另一个 vector 中搜索一个 vector

c - C 程序在查找整数三元组 (x,y,z) 时出错,使得 n^x + n^y = n^z 对于给定的 n 范围

c - 给定 n,求加起来得到 n 的最大数

windows - 如何通过powershell将用户权限分配给本地用户帐户?

windows - OpenGL 如何找到在 Windows 上使用的实现?

ruby-on-rails - Windows 上 Rails 的延迟工作?

c++ - 将文本文件复制到 USB 内存棒

c++ - 从 C++ 中的 table.subtable 调用 lua 函数