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