【问题标题】:Accessing USB HID from VB6从 VB6 访问 USB HID
【发布时间】:2017-01-05 14:25:06
【问题描述】:

我购买了一台测量空气中二氧化碳含量的设备。它每 3 秒通过 USB 报告一次数值。我想用 VB6 处理这些值。

插入设备后,我在硬件管理器中找到它,列为人机接口设备 (HID)。

通过检查我知道的相应条目,我将其插入 Port_#0003.Hub_#0003。在事件选项卡中,我读到名称为 USB\VID_04D9&PID_A052\1.40 的设备已配置,并且它的类 GUID 是 {745A17A0-74D3-11D0-B6FE-00A0C90F57DA}。没有 RS/232 实现,至少,我没有看到任何实现,所以 MS COMM Control 没有用(在所有 16 个允许的端口号上都尝试过)。

通过 SO 搜索有关带有 [VB6] 标记的 HID 的信息,我得到的唯一信息是直接使用 HID API 是一个 PITA。

我还是想试试,尝试引用HID.dll,结果发现VB6抱怨这个DLL不能被VB使用。

有什么方法可以访问我的设备以获取和处理通信数据?我该如何开展这项事业?

【问题讨论】:

  • 当您说“引用”DLL 时,您的意思是“将其添加为引用”吗?如果它不是 COM DLL,则需要为任何包含的函数添加声明。是否有记录的 API?是用 C 写的吗?
  • 吉姆,是的,我试图将其添加为参考。但是,它是为 HID 编写的产品,鼓励 MS 使用。请参阅此说明:en.wikipedia.org - 此页面声称“您可以使用 Windows 的内置 HID(人机接口设备)驱动程序与符合 USB 的 HID 类规范的设备进行通信。不需要自定义驱动程序;设备使用 Windows 中包含的驱动程序。使用任何支持调用 API 函数的编程语言。": janaxelson.com/hidpage.htm/wiki/…

标签: vb6


【解决方案1】:

如果您没有完整的供应商文档,这不适合胆小的人使用任何语言。在使用供应商的软件时,您可能必须使用 USB 嗅探器来捕获原始数据包。从那里开始抓挠和猜测的艰苦工作。

请参阅[VB6] TEMPer Gold USB HID Thermometer Class 以了解使用 VB6 编写的代码示例以用于此类设备。即使其他人已经发布了示例 C 代码并且对交换的 USB 数据包进行了一些反思,即使要让它工作也需要大量的尝试。除非其他人已经为您完成了一些繁重的工作,否则您似乎还有更多工作要做。

HID.DLL 不是 ActiveX 库。它没有嵌入类型库。据我所知,也没有可用的外部类型库。所以无论如何都没有什么可以设置引用。

不仅如此,它甚至不是一个 COM 库,而是一个原始的普通旧标准 DLL。

我认为你可能太过分了。除非供应商提供 API 库,否则您可能会不走运,除非您有时间和工具进行必要的研究和开发。如果供应商提供体面的低级文档,它会节省一些精力,但这似乎不太可能,因为他们很少这样做。

【讨论】:

  • 感谢您让我开始。在我取得一些重大进展之前,我不会将您的答案标记为解决方案,我希望我会这样做。 +1
【解决方案2】:

我看到Jan Axleson 有一个指向 VB6 实现的链接(cmets 中的同一页面),但是页面上的所有链接都被破坏了——它们只是重新加载页面。如果你能找到它,我相信它会满足你的需求。

无论如何,您显然可以通过DirectInput 使用任何受支持的 HID 设备。实例 DirectX8,然后是 DirectInput8,然后是 DirectInputDevice。使用感兴趣的设备(您的 HID 设备)GetDIDevices.Acquire 枚举设备并探索其功能。

这一切都依赖于 DirectX,它完全是 MS 的 documented。这些文档对 VB6 不友好,但通常可以解决。

【讨论】:

  • 谢谢吉姆。但是,DirectX8 无法在 Win 8.1 上安装,并表示需要 Win 9x、...、Vista。
  • @Herb 只需安装适用于您的操作系统的最新 DX 版本(11?)。所有早期的接口都应该包含在新版本中,否则会有等价的。
猜你喜欢
  • 2016-07-14
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 2014-05-27
相关资源
最近更新 更多