在应用程序的WDK构建环境中使用boost?

8 boost kernel iostream driver wdk

我正在使用Windows驱动程序工具包(WinDDK 6001.18001)来构建我的用户空间应用程序而不是Visual Studio 2005.我采用这种方法,因为我们还必须构建驱动程序组件,所以我更愿意有一个构建环境来构建所有东西.微软本身将这种方法用于多种产品.

这一点工作正常,直到我开始使用Boost 1.38.0.我没有在内核模式组件中使用C++,只是用户空间应用程序.在C++代码中,使用boost库是很自然的.不幸的是,WDK不同意.

我注意到的第一个错误是"的#include <cstddef>"不把ptrdiff_tstd名称空间中,如需要似乎附件D.在解决此左边的几个误区工作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
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

dir*_*tly 1

有趣的问题。对于 WDK,按原样使用 STL 本身就是一个挑战。我还没有冒险超越。我可以尝试一下。请记住,WDK 有自己的编译器,该编译器与您的 VS2005/VS2008 编译器不同(检查版本号)。很可能到处都存在一些错误。

请注意,这USE_MSVCRT=1并USE_STL=1不能很好地胶凝(至少对于 WDK 6001 而言)。