我正在运行最新版本的 Visual Studio C++ 桌面以及最新的 v4.8.04084 版本的 .NET Framework,并且在头文件中我有 #include
显然,Visual Studio 找不到这两个定义的位置。请注意,“Windows.h”显示在项目的“外部依赖项”列表中。那么,缺失的标识符似乎没有在 Windows.h 或 winreg.h 中定义,后者包含在 Windows.h 中。花了几天时间试图找到定义这些标识符的文件,我不知所措。
我的目标是能够编辑注册表中的值。有谁知道标识符“Microsoft”、“Win32”和“Microsoft.Win32”是在哪里定义的?
我在互联网上尝试了很多搜索来寻找这个问题的答案。 Chat GPT 说这些标识符应该在 winreg.h 中定义。没有这样的运气。
另外,Visual Studio 2017 也不走运。
对于在 Windows 上使用 C++ 进行编程并希望在注册表中读取和写入值的任何其他人,这里是答案。正如有用的评论者所指出的,我们必须忽略有关 winreg.h 的 C# 和 .NET 信息。此资源在 C#/.NET 中与 C++ 中的 winreg.h 文件完全不同。前者可以定义 Microsoft.Win32 命名空间。后者则不然。
我能够使用 C 函数 RegOpenKeyExA(使用 KEY_QUERY_VALUE | KEY_SET_VALUE 作为 samDesired 参数值)、RegGetValueA、RegSetValueExA 和 RegCloseKey 读取和写入 HKEY_CURRENT_USER\Control Panel\International 子项中的时间格式注册表值,所有这些在 Visual Studio 2022 C++ 社区版本安装的 winreg.h 文件中声明。在使用这些函数时,必须严格遵守一些晦涩的类型名称,例如 HKEY、DWORD、LSTATUS 和 BYTE,并使用 malloc 和 free 函数分配和释放一些缓冲区空间。它有效。
https://learn.microsoft.com/en-us/windows/win32/api/winreg/ 上的 winreg.h 概述及其链接足以学习如何使用 C 函数。