什么是SetupAPI、SetupAPI1和SetupAPI2?它们之间有什么区别?

4

最近,我需要使用C++在MFC中实现一个小功能,用于获取可用串口的列表。然后我看到了这个。我想知道SetupAPI1和SetupAPI2是什么?当我想要使用这种方式来实现我的功能时,我应该从哪里获取setup.dll文件?在搜索互联网时,我发现有一个SetupAPI,但它似乎是另外一个。现在,我真的被这些SetupAPI、SetupAPI1和SetupAPI2弄糊涂了。它们有什么区别?它们从哪里来?如果我想要使用它们,我该如何获取?


你提到的SO链接指向了由PJ Naughter编写的EnumSerialPorts v1.27。EnumSerialPorts中的SetupAPI1()和SetupAPI2()函数都使用Windows设备管理器的“SetupDi”API。这正是你在帖子中询问的SetupAPI。希望这可以帮到你! - paulsm4
非常感谢!那真的帮了我很多。 - Sophie
1个回答

3

SetupAPI1和SetupAPI2并不存在,只有一个名为SetupAPI的库。

你提供的答案指的是一个名为EnumSerialPort的库。从该页面可以看到:

在内部,代码提供了9种不同的枚举串口的方式(没错,你没看错:九种):使用CreateFile、QueryDosDevice、GetDefaultCommConfig、两种使用Setup API的方式、EnumPorts、WMI、Com数据库以及枚举注册表键HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM下的值。

...

代码的所有配置都由以下预处理器值控制:CENUMERATESERIAL_USE_STL、_AFX、NO_ENUMSERIAL_USING_CREATEFILE、NO_ENUMSERIAL_USING_QUERYDOSDEVICE、NO_ENUMSERIAL_USING_GETDEFAULTCOMMCONFIG、NO_ENUMSERIAL_USING_SETUPAPI1、NO_ENUMSERIAL_USING_SETUPAPI2、NO_ENUMSERIAL_USING_ENUMPORTS、NO_ENUMSERIAL_USING_WMI、NO_ENUMSERIAL_USING_COMDB和NO_ENUMSERIAL_USING_REGISTRY。

这个库提供了两种不同的方法,都依赖于SetupAPI,并将它们简单地编号为一和二。您可以通过以下链接查看这些详细信息以及更多内容。


哦,非常感谢!直到我看到答案,我才意识到这9种方法都来自于EnumSerialPort。除了参考EnumSerialPort之外,还有其他方法可以列出串口,比如CreateFile、注册表键等。所以,当我看到这9种方法时,我没有意识到它们都是指EnumSerialPort。我真是太蠢了。 - Sophie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接