Использование boost в среде сборки WDK для приложений? - PullRequest
8 голосов
/ 05 апреля 2009

Я использую Windows Driver Kit (WinDDK 6001.18001) для создания своего пользовательского приложения, а не Visual Studio 2005. Я использую этот подход, потому что мы также должны создавать компоненты драйвера, поэтому я бы предпочел иметь одну среду сборки строить все. Microsoft сама использует этот подход для нескольких продуктов.

Это работало нормально, пока я не начал использовать Boost 1.38.0. Я не использую C ++ в компонентах режима ядра, только приложения пользовательского пространства. В коде C ++ естественно использовать библиотеки boost. К сожалению, WDK не согласен.

Первая ошибка, которую я заметил, заключается в том, что "#include " не помещает ptrdiff_t в пространство имен std, как это требуется в Приложении D. В результате обхода этой ошибки в boost\lambda\detail\operator_return_type_traits.hpp about 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;
}

Ответы [ 3 ]

1 голос
/ 07 декабря 2009

Boost может уже включать решение ваших проблем, но не применяет его, потому что не распознает используемый вами компилятор (возможно, потому что драйверы редко используют boost).

Попробуйте проверить (и, возможно, отредактировать) boost/config/select_compiler_config.hpp и boost/config/compiler/visualc.hpp, чтобы убедиться, что обходные пути компилятора для MSVC включены.

1 голос
/ 05 апреля 2009

Интересный вопрос. Использование STL как есть было проблемой само по себе для WDK. Я не рискнул дальше. Я могу попробовать. Помните, что WDK имеет свой собственный компилятор, который не совпадает с вашим компилятором VS2005 / VS2008 (проверьте номера версий). Весьма вероятно, что здесь и там есть несколько ошибок.

Обратите внимание, что USE_MSVCRT=1 и USE_STL=1 плохо гелируются (по крайней мере, для WDK 6001).

0 голосов
/ 05 апреля 2009

Я бы предложил пойти другим путем, то есть компилировать драйвер из VS200.x, используя этот (ddkbuild) хороший инструмент.

Будучи самим человеком из командной строки и везде используя make-файлы, я нахожу утилиту сборки бесполезной для сложного проекта. В утилите сборки MS существует множество ограничений, и я бы рекомендовал использовать среду VS для компиляции вашего проекта.

Я не уверен, есть ли инструкции в ddkbuild, но просто интегрировать ddkbuild.bat в опцию произвольной сборки VS.

...