【问题标题】:Compiling an application that uses WinUsb编译使用 WinUsb 的应用程序
【发布时间】:2009-09-29 14:40:35
【问题描述】:

我正在编写一个使用 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 构建过应用程序?

【问题讨论】:

    标签: c++ winusb wdf


    【解决方案1】:

    我正在编写一个跨平台的 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 标头包在客户端用户模式应用程序中使用。

    【讨论】:

    • 不知道这是否是“正确”的方式。至少它似乎有效......这真的很可怕。
    • 这似乎完全符合所讨论平台上的“正确”;)确实,它有效!
    【解决方案2】:

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

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

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

    【讨论】:

    • Michael,感谢您抽出宝贵时间回答我的问题。我还听说已经对 DDK 和 SDK 进行了网格化,但就像你说的那样,似乎有些冲突。我担心我对这个问题的回答会告诉我必须使用 DDK 构建环境。我以一种肮脏的方式解决了这个问题,我将作为答案发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2016-10-25
    • 1970-01-01
    • 2023-04-02
    • 2019-07-14
    • 2015-03-24
    • 1970-01-01
    相关资源
    最近更新 更多