8

Visual Studio2005ではなくWindowsDriverKit(WinDDK 6001.18001)を使用してユーザースペースアプリケーションをビルドしています。ドライバーコンポーネントもビルドする必要があるため、このアプローチを採用しています。したがって、すべてをビルドするための単一のビルド環境が必要です。 。Microsoft自体は、いくつかの製品にこのアプローチを使用しています。

Boost 1.38.0を使い始めるまで、これは問題なく機能していました。カーネルモードコンポーネントではC++を使用しておらず、ユーザースペースアプリケーションのみを使用しています。C ++コードでは、Boostライブラリを使用するのが自然です。残念ながら、WDKは同意しません。

私が気付いた最初のエラーはptrdiff_t、Annex Dで必要と思われるように、「#include <cstddef>」がstd名前空間に配置されないことです。これを回避すると、boost\lambda\detail\operator_return_type_traits.hpperror C2976: 'std::basic_string' : too few template arguments.にいくつかのエラーが残りました。iostreamでは冗長に見えます。

Boost、iostream、およびWDKの組み合わせをうまく連携させることができた人はいますか?

私のソースファイル:

TARGETNAME=foobar
TARGETTYPE=PROGRAM

USE_MSVCRT = 1
USE_STL = 1
USE_ATL = 1
ATL_VER = 30
STL_VER = 70
USE_NATIVE_EH = 1 
USE_IOSTREAM = 1

SUBSYSTEM_VERSION = 5.02

C_DEFINES = \
    -D_MT \
    -DWIN_32 \
    -DWIN32  \
    -D_WINDOWS \
    -DNT \
    -D_WIN32_DCOM \
    -DUNICODE \
    -D_UNICODE \
    -D_ATL_NO_DEBUG_CRT # because we are using USE_MSVCRT=1 

SOURCES=service.cpp

INCLUDES=\
    $(BOOST_INC_PATH)

TARGETLIBS=\
    $(SDK_LIB_PATH)\ole32.lib \
    $(SDK_LIB_PATH)\oleaut32.lib \
    $(SDK_LIB_PATH)\uuid.lib \

UMTYPE=console
UMBASE=0x400000

service.cpp:

#include <iostream>
#include <cstddef>

namespace std {
        typedef ::ptrdiff_t ptrdiff_t; // DDK C++ workaround
}

#include <boost/lambda/lambda.hpp>

int __cdecl main() {
    return 0;
}
4

3 に答える 3

1

Boost には既に問題の回避策が含まれている可能性がありますが、使用しているコンパイラが認識されないため (おそらくドライバがほとんどブーストを使用しないため)、それを適用していません。

調べて (場合によっては編集して) boost/config/select_compiler_config.hppboost/config/compiler/visualc.hppMSVC のコンパイラの回避策が有効になっていることを確認してください。

于 2009-12-07T11:58:30.067 に答える
1

興味深い質問です。WDK では、STL をそのまま使用すること自体が課題でした。私はそれ以上の冒険はしていません。私はこれを試すことができます。WDK には、VS2005/VS2008 コンパイラとは異なる独自のコンパイラがあることに注意してください (バージョン番号を確認してください)。あちこちにいくつかのバグがある可能性が高いです。

USE_MSVCRT=1とがうまくゲル化しなかったことに注意してくださいUSE_STL=1(少なくとも WDK 6001 の場合)。

于 2009-04-05T07:22:10.463 に答える
0

別の方法、つまり、この(ddkbuild) 便利なツールを使用して VS200.x からドライバーをコンパイルすることをお勧めします。

私自身はコマンド ライン担当者であり、可能な限り makefile を使用しているため、ビルド ユーティリティは複雑なプロジェクトには役に立たないことがわかりました。MS ビルド ユーティリティには多くの制限があり、プロジェクトのコンパイルには VS 環境を使用することをお勧めします。

ddkbuild にハウツーがあるかどうかはわかりませんが、ddkbuild.bat を VS カスタム ビルド オプションに統合するのは簡単です。

于 2009-04-05T17:40:04.973 に答える