找不到命名空间“Microsoft.Win32”

Can't Find Namespace "Microsoft.Win32"

提问人:user22487671 提问时间:9/2/2023 更新时间:9/5/2023 访问量:54

问:

我正在使用最新的 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++ 注册表 标识符 net-4.8

评论

4赞 Some programmer dude 9/2/2023
看来你在这里混合了你的语言和框架。C++不是C#,甚至与C++ / CLI也不相同。C++ 与 .NET 或 .NET 命名空间没有任何关系。
0赞 Some programmer dude 9/2/2023
我也很好奇,你用什么学习或教学资源来学习这些东西?他们到底在教你什么?
1赞 Pepijn Kramer 9/2/2023
如果您要使用 C++,那么您将需要使用 Windows API(您不能像您尝试的那样使用任何 .Net 类)。使用现代 C++ 访问 Windows 注册表
0赞 user22487671 9/3/2023
我很欣赏@Some程序员 dude 和 Pepijn Kramer 的快速回复。你给了我我需要的线索。我是自学成才的,我承认这个案例中的老师是无能的,我不会向任何人推荐他。多年来,我一直依赖像 Stackoverflow 这样的在线资源,以前从未问过问题。对于像我这样的人,我会尽量给出一个清晰的答案。
1赞 Pepijn Kramer 9/3/2023
学习 cpp 的好来源是:一本最近的C++书或尝试一下 learncpp.com(这是相当不错的,而且是最新的)。对于 C++ 参考资料,请使用 :cppreference。从这些来源学习了 C++ 基础知识后,请定期查看 C++ 核心指南,以了解最新的指南。

答:

0赞 user22487671 9/5/2023 #1

对于使用 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 函数。