Estoy usando el Windows Driver Kit (WinDDK 6001.18001) para construir mi aplicación de espacio de usuario en lugar de Visual Studio 2005. Estoy tomando este enfoque porque también tenemos que crear componentes de controladores, por lo que preferiría tener un único entorno de compilación para construir todo. Microsoft mismo usa este enfoque para varios productos.¿Cómo usar el impulso en el entorno de compilación WDK para las aplicaciones?
Esto funcionaba bien hasta que comencé a usar Boost 1.38.0. No estoy usando C++ en los componentes del modo kernel, solo las aplicaciones de espacio de usuario. En el código C++, es natural usar las bibliotecas de impulso. Desafortunadamente, el WDK no está de acuerdo.
El primer error que he notado es que "# include <cstddef>" no pone ptrdiff_t
en el espacio de nombres std, como parece estipulada en el anexo D. El trabajo en torno a esta dejado varios errores en boost\lambda\detail\operator_return_type_traits.hpp
sobre error C2976: 'std::basic_string' : too few template arguments.
Parece redundante con iostream .
¿Alguien ha conseguido con éxito la combinación de Boost, iostream y WDK para trabajar juntos? presentar
Mis fuentes:
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;
}
Gracias por compartir su experiencia. Intenté usar USE_LIBCMT = 1 en lugar de msvcrt, pero persistieron los problemas. Dado que incluso STL es problemático, voy a tener que reconsiderar el uso de WDK. –
Construimos nuestra parte de la aplicación w/VS200x y el controlador solo con el WDK. Tenga en cuenta que la utilidad ddkbuild es solo un archivo por lotes contenedor sobre los argumentos de la línea de comandos (lo uso todo el tiempo) y probablemente no ayude a resolver los problemas del compilador. – dirkgently
Sugerí usar ddkbuild para compilar driver y usar estándar vs proyecto para compilar la aplicación. Tendrá una solución que uno de los proyectos (controlador) se compilará con compilación personalizada utilizando ddkbuild y el segundo (Boost) se compilará de manera estándar. – Ilya