编译使用 WinUsb 的应用程序

jos*_*rry 5 c++ winusb wdf

我正在编写一个应用程序来使用 WinUsb.dll 与 USB 设备进行通信。这是一个用户模式库,允许通过作为驱动程序安装在内核中的 winusb.sys 与设备进行通信。

我正在使用 Visual Studio 2008 用 C++ 编写此应用程序。

标头 WinUsb.h 在 Windows DDK 中找到,因此我添加了包含路径“D:\WinDDK\7100.0.0\inc\ddk”。然后我得到一个错误,指出 WinUsb.h 包含的 Usb.h 找不到,Usb.h 也在 ddk 中,但在不同的目录中,所以我添加“D:\WinDDK\7100.0.0\inc\api”作为包含目录。

一旦我添加了该路径,那么一切都会进入厕所,并且我开始在 stdio.h 和其他一些奇怪的地方出现编译错误。

我真的不想使用 DDK 构建系统和编译器来简单地使用这个 DLL,这是我使用 WinUsb 而不是编写适当的驱动程序的主要原因之一。

有人使用 WinUsb.dll 和 Visual Studio 构建过应用程序吗?

jos*_*rry 3

我正在编写一个跨平台 USB 库,使用 DDK 构建环境会使我的构建过程变得更加复杂。

WinUsb 旨在由加载 WinUsb.sys 作为其驱动程序的设备的客户端应用程序使用。但是,似乎没有打包用于用户模式程序(不包括 UMDF 驱动程序)的 WinUsb 标头版本。

我最终所做的是将支持 winusb.h 的几个标头从 DDK 复制到私有目录中,然后在构建过程中将该目录引用为包含目录。

这些是我需要复制的标题:

POPPACK.h
PSHPACK1.h
usb.h
usb100.h
usb200.h
winusb.h
winusbio.h
Run Code Online (Sandbox Code Playgroud)

一旦我将这些包含在私有目录中并与 DDK 中的 winusb.lib 链接,我就能够在 Visual Studio 中编译并运行我的项目。

我不知道是否会推荐此方法,因为当 DDK 版本之间的标头发生变化时,它可能会很糟糕,但我将打开一个 CONNECT bug 来看看是否可以让 MS 创建一个 WinUsb 标头包以在客户端中使用用户模式应用程序。

  • 这似乎与相关平台上的“正确”相符;)确实,它有效! (2认同)