2009-09-29 170 views
4

我正在編寫使用WinUsb.dll與Usb設備進行通信的應用程序。這是一個用戶模式庫,它允許通過安裝在內核中的驅動程序winusb.sys與設備進行通信。編譯使用WinUsb的應用程序

我寫在C++這個應用程序與Visual Studio 2008

頭WinUsb.h在Windows DDK中發現,所以我添加包含路徑「d:\ WINDDK \ 7100.0.0 \ INC \ DDK 」。然後我得到一個錯誤,發現Usb.h不能被WinUsb.h包含,Usb.h也在ddk中,但在一個不同的目錄中,所以我添加了「D:\ WinDDK \ 7100.0.0 \ inc \ api」作爲一個包含目錄。

一旦我添加該路徑,然後一切都進入廁所,我開始在stdio.h和一堆其他奇怪的地方得到編譯錯誤。

我真的不想使用DDK構建系統和編譯器,以便簡單地使用這個DLL,這是我使用WinUsb而不是寫一個正確的驅動程序的主要原因之一。

是否有人使用WinUsb.dll和Visual Studio構建了一個應用程序?

回答

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 

有一次,我這些包含在專用目錄和我能夠編譯,並在Visual Studio中運行我的項目在DDK與winusb.lib鏈接。

我不知道我是否會推薦這種方法,因爲當DDK版本之間的頭文件發生變化時,它可能會變得很糟糕,但是我會打開一個CONNECT錯誤以查看是否可以讓MS創建一個WinUsb頭文件包用於客戶端用戶模式應用程序。

+1

如果這是「正確」的方式,不知道。至少它似乎有效......這真的很可怕。 – 2013-10-15 14:18:14

+2

這似乎很適合所討論的平臺上的「正確」;)確實,它起作用! – Magnus 2014-09-12 08:02:40

1

從歷史上看,DDK和SDK並沒有很好的結合在一起,但是這個問題在Vista發佈之前就已經解決了。但是,您似乎可能會將某個SDK的某些部分與另一個SDK混合在一起,這並不好。我要麼使用DDK編譯環境,要麼至少查看DDK環境設置的INCLUDE路徑,並在VS項目設置中將其複製到,確切地說是

注意,您可以使用DDK構建環境,仍然通過創建一個「生成文件項目」使用VS IDE或者您可能能夠使用像OSR的或Hollistech的DDKBUILD工具:

我沒有使用過這些,所以我不知道他們是如何很好地工作,但要注意的是,儘管他們的名稱相似,並使用它們是不同的工具。

+0

Michael,謝謝你花時間回答我的問題。我還聽說,DDK和SDK的網格劃分工作已經完成,但正如你所說的,某些東西似乎有衝突。我很害怕我對這個問題的迴應會告訴我必須使用DDK構建環境。我以一種骯髒的方式解決了這個問題,我將作爲答案發布。 – joshperry 2009-10-03 17:55:06