4

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

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

在 Windows DDK 中可以找到标头 WinUsb.h,因此我添加了包含路径“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 构建过应用程序?

4

2 回答 2

4

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

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

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

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

POPPACK.h
PSHPACK1.h
usb.h
usb100.h
usb200.h
winusb.h
winusbio.h

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

我不知道我是否会推荐这种方法,因为当 DDK 版本之间的头文件发生变化时它可能会很糟糕,但我会打开一个 CONNECT 错误,看看我是否可以让 MS 创建一个 WinUsb 头文件包以用于客户端用户模式应用程序。

于 2009-10-03T18:41:02.477 回答
1

从历史上看,DDK 和 SDK 并没有很好地结合在一起,但是这个问题在 Vista 发布之前的某个时候得到了解决。但是,您似乎将一个 SDK 的一部分与另一个 SDK 混合在一起,这并不好。我要么使用 DDK 构建环境,要么至少看看 DDK 环境设置的 INCLUDE 路径,并在 VS 项目设置中准确复制它。

请注意,您可以通过创建“makefile 项目”来使用 DDK 构建环境并仍然使用 VS IDE,或者您可以使用 OSR 或 Hollistech 的 DDKBUILD 工具之类的工具:

我没有使用过这些,所以我不确定它们的工作情况如何,但请注意,尽管它们的名称和用途相似,但它们是不同的工具。

于 2009-09-29T17:14:20.837 回答