windows - 了解 MAKEINTRESOURCEW 定义

标签 windows winapi c-preprocessor

查看 Windows SDK,我发现了 MAKEINTRESOURCEW 的 #define 指令:

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

谁能给我解释一下这到底是什么意思?例如,MAKEINTRESOURCEW(0) 的值是多少? (1)? (-1)?

最佳答案

这个宏的结果将是指向长字符串的指针,其值等于给定参数。您可以通过阅读预编译器输出来查看它(请参阅/P C++ 编译器选项)。当需要 LP[w]WSTR 指针时,在 Win32 和 x64 配置中都需要所有转换来编译此宏结果。

一些 Windows API,如 LoadIcon,期望字符串指针作为它们的参数。这些函数可能会测试指针值,如果它小于某个最大值,它们会将其解释为资源索引,而不是字符串(丑陋的 C 风格接口(interface)的问题)。因此,此宏允许通过适当的转换将 WORD 作为字符串传递,而不更改其值。

关于windows - 了解 MAKEINTRESOURCEW 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2963634/

相关文章:

windows - sqlite3.exe : How to stop a long-running SQL statement

windows - GDIPlus Windows 用户界面的 future : which will be the replacement?

c - select 未检测到本地主机连接已关闭

c++ - 如何在Qt中用宏定义信号

linux - 运行 sh 脚本给出未找到任何 UNIX/Linux 基本命令的命令

c++ - 我的 Visual C++ 程序可以监听它自己的调试输出吗?

c++ - 如何在不使用目录的情况下在磁盘上查找文件

c - 如何使用宏扩展作为编译指示的第一个标识符?

c - 为什么 MSVC 预处理器连接 token 的方式与 GCC 和 Clang 不同?

windows - 如何以编程方式更改当前的 Windows 主题?