【问题标题】:Use libusb with Delphi on Windows 64-bit?在 Windows 64 位上使用 libusb 和 Delphi?
【发布时间】:2011-01-26 09:43:51
【问题描述】:

看了一点,我担心我的 32 位 Delphi 应用程序将无法在 Windows 7 和其他 64 位 Windows 系统上使用libusb 64 位驱动程序,并且无法使用在这些系统上与我的自定义硬件设备交谈。这是真的?如果是,是否有一些解决方法?我在这张照片中遗漏了什么吗?

【问题讨论】:

    标签: windows delphi 64-bit driver libusb


    【解决方案1】:

    究竟是什么让你认为它不会?如果您有 64 位驱动程序,则它可在 64 位系统上使用(假设驱动程序工作正常且已正确签名)。 32 位和 64 位应用程序都可以通过各种通信机制(例如 Ioctl 或 MMF 文件)控制驱动程序。问题是代码的所有部分是否正确编写,但这个问题适用于任何库和任何平台

    【讨论】:

    • 我担心在 32 位应用程序中使用 64 位 usblib dll,因为我不确定在这种情况下是否可以进行其他类型的驱动程序访问。这就是为什么我寻求帮助以可能将自己从死胡同中解救出来。谢谢你的回答。
    • @avra 没有可用的 32 位 DLL 吗?如果是, - 使用它。如果编写正确,32 位用户模式 ​​DLL 将与 64 位驱动程序正常通信。我们所有基于驱动程序的产品都以这种方式工作。
    • 嗯,与此同时,事情变得有点复杂了......似乎我必须使用 libusb 0.1 化身 (libusb-win32),其中 32 位版本的 DLL (libusb0_x​​86.dll) 调用 32-位 libusb0.sys 驱动程序,而 64 位版本 DLL (libusb0.dll) 调用 64 位 libusb0.sys 驱动程序。这可能意味着调用 32 位 DLL 将毫无用处。我想知道是否有人可以证实这一点。感谢您对此主题的关注。
    • @avra 32 位 DLL 需要 32 位驱动程序并且不适用于 64 位驱动程序,这有点奇怪。正确编写的代码不应该关心驱动程序是 32 位还是 64 位。如果你有库的源代码,你可以检查一下,究竟是什么导致了这个限制 - 是不同文件名的简单问题还是问题更根本
    【解决方案2】:

    在带有 WinUSB 后端(Windows 中包含 Microsoft 驱动程序)的 libusb 1.0 上,我们从 x86 应用程序(C# 应用程序使用的托管 c++ 库)与其通信没有问题。在 x86 和 x64 平台上的行为是相同的。

    我不知道 libusb 0.1(能够使用 libusb-win32 内核驱动程序的旧版本),但作为您指向 1.0 版本的链接,您似乎没有使用它。 em>

    在某些时候 libusb 1.0 将支持 libusb-win32 内核驱动程序,但除非在特定情况下没有必要(WinUSB 有一些限制,但我从未遇到过)

    【讨论】:

    • WinUSB 接缝只存在于 WinXP SP2 和更新版本,这不好,因为我必须支持带有 SP1 且没有任何 SP 的 Win2K 和 WinXP。 WinUSB 不能同时与多个应用程序通信。这对于当前的应用程序来说不是问题,但对于某些需要它的未来硬件来说可能是一个问题,我不想学习两次。此外,WinUSB 不存在于非 Windows 操作系统上,目前这不是问题,但将来会出现。所有这些都让我转向了普通的 libusb 1.0,或者转向了类似 CDC 类的东西。谢谢你的回答。
    • 如我的回答中所述,如果您使用 LibUsb 1.0,您实际上是在使用 WinUSB 驱动程序,因为它是当前代码支持的唯一驱动程序(如果您的设备不是 HID,但在这种情况下,除了linux支持你为什么使用libusb?)。并且由于您问题中的链接指定“支持的系统都是 Windows 平台,从 Windows XP 开始”。
    • @avra 既然没有 Windows 2000 或 XP SP2 的 64 位版本,为什么还要担心这些平台上的 64 位版本?
    • @David Heffernan :我想问题是确定当前在 win2000 上运行的应用程序将在 x64 版本的 say vista 上运行相同。 (但这意味着当前版本在 2000 上运行,因此设备是 HID 或使用 libusb 0.1)
    • @virtual 当你在 x64 上运行这个应用程序时会发生什么?顺便说一句,x64 is vista 已经出现了很长时间了。
    【解决方案3】:

    我在装有 delphi 32 位应用程序的 Win7 64 位笔记本电脑上成功使用了libusb-win32。到目前为止没有问题。驱动程序也已签名(只有我的 .inf 文件未签名)。

    请注意,libusb-win32 使用“旧”的 libusb API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-16
      • 2014-12-15
      • 2011-01-13
      • 1970-01-01
      • 2011-12-21
      • 2015-02-28
      相关资源
      最近更新 更多