Sto utilizzando Windows Driver Kit (WinDDK 6001.18001) per creare la mia applicazione userspace anziché Visual Studio 2005. Sto adottando questo approccio perché dobbiamo anche creare componenti driver, quindi preferirei avere un singolo ambiente di build per costruisci tutto. Microsoft stessa utilizza questo approccio per diversi prodotti.Uso di boost nell'ambiente di compilazione WDK per le applicazioni?
Questo funzionava bene fino a quando non ho iniziato a utilizzare Boost 1.38.0. Non sto usando C++ nei componenti della modalità kernel, solo le applicazioni userspace. Nel codice C++, è naturale usare le librerie di boost. Sfortunatamente, il WDK non è d'accordo.
Il primo errore che ho notato è che "# include <cstddef>" non mette ptrdiff_t
nel namespace std, come sembra richieste nell'allegato D. Lavorando intorno a questa data diversi errori in boost\lambda\detail\operator_return_type_traits.hpp
circa error C2976: 'std::basic_string' : too few template arguments.
Sembra ridondante con iostream .
Qualcuno ha ottenuto con successo la combinazione di Boost, iostream e WDK per lavorare insieme? il file
Le mie fonti:
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;
}
Grazie per aver condiviso la tua esperienza. Ho provato a utilizzare USE_LIBCMT = 1 invece di msvcrt, ma i problemi sono rimasti. Dato che anche STL è problematico, dovrò riconsiderare l'utilizzo del WDK. –
Costruiamo la nostra parte dell'app w/VS200x e il driver solo con WDK. Nota: l'utilità ddkbuild è solo un file batch wrapper sugli argomenti della riga di comando (lo uso sempre) e probabilmente non aiuterà a risolvere i problemi del compilatore. – dirkgently
Ho suggerito di utilizzare ddkbuild per creare driver e utilizzare il progetto standard vs per creare l'applicazione. Avrai una soluzione in base alla quale uno dei progetti (driver) verrà creato con la build personalizzata usando ddkbuild e il secondo (Boost) sarà costruito in modo standard. – Ilya