私はWindows Driver Kit(WinDDK 6001.18001)を使用してVisual Studio 2005ではなくユーザースペースアプリケーションを構築しています。ドライバコンポーネントをビルドする必要があるため、私はこのアプローチを採用しています。すべてを構築する。マイクロソフト自身もこのアプローチをいくつかの製品に使用しています。アプリケーションのWDKビルド環境でのブーストを使用しますか?
これは、Boost 1.38.0を使用するまでは問題なく動作していました。私はカーネルモードのコンポーネントでC++を使用せず、ユーザスペースアプリケーションだけを使用しています。 C++コードでは、ブーストライブラリを使用するのは当然です。残念ながら、WDKは同意しません。
私が気づいた最初のエラーは、「> cstddefの#include <」この周りの作業附属書Dによって必要と思わとして、std名前空間にptrdiff_t
を入れていませんが、それはiostreamをして冗長表示されますerror C2976: 'std::basic_string' : too few template arguments.
についてboost\lambda\detail\operator_return_type_traits.hpp
にいくつかのエラーを残したということです。
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;
}
あなたの経験を共有していただきありがとうございます。私はmsvcrtの代わりにUSE_LIBCMT = 1を使ってみましたが、問題は残っていました。 STLでも問題があるとすれば、WDKを再考する必要があります。 –
私たちはVS200xでアプリケーションパートを構築し、WDKでのみドライバをビルドします。 ddkbuildユーティリティはコマンドライン引数(私はずっと使用しています)上の単なるラッパーバッチファイルであり、おそらくコンパイラの問題を整理するのには役に立たないことに注意してください。 – dirkgently
ドライバを構築し、標準のvsプロジェクトを使ってアプリケーションをビルドするためにddkbuildを使うことを提案しました。プロジェクト(ドライバ)の1つがddkbuildを使用してカスタムビルドでビルドされ、2番目のもの(ブースト)が標準的な方法でビルドされるという解決策があります。 – Ilya