4

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やその他の奇妙な場所でコンパイルエラーが発生し始めます。

この DLL を単純に使用するために DDK ビルド システムとコンパイラを使用したくありません。これが、適切なドライバーを作成する代わりに WinUsb を使用している主な理由の 1 つです。

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 リリース間でヘッダーが変更された場合に問題が発生する可能性があるため、この方法を推奨するかどうかはわかりませんが、クライアントで使用する WinUsb ヘッダーのパッケージを作成するように MS に依頼できるかどうかを確認するために、CONNECT バグを開きます。ユーザー モード アプリケーション。

于 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 に答える