我正在编写一个使用 WinUsb.dll 与 USB 设备通信的应用程序。这是一个用户模式库,允许通过在内核中作为其驱动程序安装的 winusb.sys 与设备进行通信。
我正在使用 C++ 和 Visual Studio 2008 编写此应用程序。
header 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 构建过应用程序?
最佳答案
我正在编写一个跨平台的 USB 库,使用 DDK 构建环境会使我的构建过程更加复杂。
WinUsb 旨在供客户端应用程序用于加载 WinUsb.sys 作为其驱动程序的设备。但是,似乎没有打包用于用户模式程序(不包括 UMDF 驱动程序)的 WinUsb header 版本。
我最终做的是将几个支持 winusb.h 的头文件从 DDK 复制到一个私有(private)目录中,然后我在构建期间将该目录作为包含目录引用。
这些是我需要复制的标题:
POPPACK.h
PSHPACK1.h
usb.h
usb100.h
usb200.h
winusb.h
winusbio.h
一旦我将这些包含在私有(private)目录中并与 DDK 中的 winusb.lib 链接,我就能够在 Visual Studio 中编译和运行我的项目。
我不知道我是否会推荐这种方法,因为当 DDK 版本之间的 header 发生变化时它可能会很糟糕,但我会打开一个 CONNECT 错误,看看我是否可以让 MS 为创建一个 WinUsb header 包在客户端用户模式应用程序中使用。
关于c++ - 编译使用 WinUsb 的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1492982/