加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用SetupDiGetClassDevs在Delphi中进行串行端口枚举

发布时间:2020-12-15 10:11:41 所属栏目:大数据 来源:网络整理
导读:我正在尝试枚举COM端口的“友好名称”.随着USB串行设备在运行时连接和断开,端口可能会动态变化. 基于this question中描述的可能方法,我试图使用SetupDiGetClassDevs方法. 我找到了this example code,但它是为旧版本的setupapi单元编写的(homepages.borland.c
我正在尝试枚举COM端口的“友好名称”.随着USB串行设备在运行时连接和断开,端口可能会动态变化.

基于this question中描述的可能方法,我试图使用SetupDiGetClassDevs方法.

我找到了this example code,但它是为旧版本的setupapi单元编写的(homepages.borland.com的原始链接当然不起作用).

我尝试使用当前JVCL(JVCL340CompleteJCL221-Build3845)中的setupapi单元,但它似乎与Delphi 7不兼容.我收到编译器错误:

if SetupDiGetDeviceRegistryProperty(DevInfoHandle,DeviceInfoData,RegProperty,@PropertyRegDataType,@S1[1],RequiredSize,@RequiredSize) then begin

在函数SetupDiGetDeviceRegistryProperty的调用中,
我在参数@PropertyRegDataType和@RequiredSize上得到错误“实际和形式参数的类型必须相同”.

Delphi3000站点说该代码是在2004年编写的,适用于Delphi 7,所以我不知道为什么它现在不适用于Delphi 7,除非setupapi已经改变.是否有人熟悉setupapi可能导致这些问题的更改?

我正在测试一个简单的控制台程序.用法声明是“窗口,
sysutils的,
类,
SETUPAPI,
注册;”

主要计划是:

begin
  ComPortStringList := SetupEnumAvailableComPorts;
  for Index := 0 to ComPortStringList.Count - 1 do
      writeln(ComPortStringList[Index]);
  end;
  end.

解决方法

看起来PDAord类型的一些参数被SetupApi.pas中的var DWord替换.您只需要在代码中从这些参数中删除“@”,如下所示:
if SetupDiGetDeviceRegistryProperty(DevInfoHandle,PropertyRegDataType,RequiredSize) then begin

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读