gpt4 book ai didi

c++ - EnumPorts() 在某些机器上返回奇怪的错误

转载 作者:太空狗 更新时间:2023-10-29 23:10:25 24 4
gpt4 key购买 nike

我维护一个应用程序,它使用 win32 EnumPorts() 函数来帮助确定计算机上安装的串口集。我在某些计算机上看到过调用获取此信息失败的情况,GetLastError() 代码为 1722(RPC 服务器不可用)。我认为这与注册表设置或所需服务被禁用有关,但到目前为止我的搜索毫无结果。还有其他人遇到过这个问题吗?

回应 Euro Micelli 的评论。我专门尝试填写一个选择列表,允许用户选择一个可用的选择列表。首先,我完全依赖 EnumPorts() 来为我提供可能的串行端口名称列表。它已被证明是不可靠的,但是在几个方面:它并不总是提供完整的端口名称集,而且正如我最近看到的那样,当“RPC 服务不可用”时,它可能完全无法运行。为什么需要 RPC 来找出本地机器上可用的端口,这完全超出了我的理解,但确实如此。后一个问题是最后一根稻草。就完全依赖所提供的名称列表而言,我使用 GetDefaultCommConfig() 函数过滤这些名称以确定我想出的每个名称的确切性质。

根据我的经验,前面提到的注册表项提供的名称列表是获取端口名称的最可靠方法。事实上,当我在设备设备管理器中禁用端口驱动程序时,我可以看到 key 得到更新。根据正常经验,我会同意依赖特定 key 充满危险的评估。然而,在这种情况下,M$ 从未提供过一个像样的机制来评估可用端口的名称。

我应该指出,我已经用扫描注册表项的算法替换了对 EnumPorts() 的调用:HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM 以获取串行端口名称。一旦我的软件发布,这应该可以解决问题。我所追求的是可以给目前正在使用发布包的客户的指点。

最佳答案

我不是 EnumPorts 方面的专家,但我强烈建议不要依赖注册表项。

  • 关键定义将来可能会发生变化。
  • 关键定义可能与您的想法不同。
  • 可能有不包含这些 key 的“成为串行端口”的方法。
  • key 可能无法反射(reflect)最新状态等。

您应该始终依赖可用的 API。

如果某个 API 不适合您,让我们试着找出原因。也许有了一些额外的信息,我们可以提供更好的帮助:

串口到底需要做什么?

关于c++ - EnumPorts() 在某些机器上返回奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/184448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com