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.hpp
約error 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;
}