编译使用WinUsb的应用程序

时间:2009-09-29 14:40:36

标签: c++ winusb wdf

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

我最终做的是将支持winusb.h的几个头文件从DDK复制到一个私人目录中,然后在构建期间将该目录引用为include目录。

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

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

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

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

答案 1 :(得分:1)

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

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

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