Ich verwende das Windows-Treiberkit (WinDDK 6001.18001), um meine Userspace-Anwendung statt Visual Studio 2005 zu erstellen. Ich nehme diesen Ansatz, da wir auch Treiberkomponenten erstellen müssen, also würde ich lieber eine einzige Buildumgebung haben bau alles. Microsoft selbst verwendet diesen Ansatz für mehrere Produkte.Verwenden von Boost in WDK Build-Umgebung für Anwendungen?
Das funktionierte gut, bis ich begann, Boost 1.38.0 zu verwenden. Ich verwende nicht C++ in den Kernel-Modus-Komponenten, nur die Userspace-Anwendungen. In C++ - Code ist es natürlich, die Boost-Bibliotheken zu verwenden. Leider stimmt das WDK nicht zu.
Der erste Fehler bemerkte ich, ist, dass „# include <cstddef>“ nicht ptrdiff_t
im std-Namespace nicht setzen, wie in Anhang D. Arbeiten, um diesen nach links erforderlich scheint mehrere Fehler in boost\lambda\detail\operator_return_type_traits.hpp
über error C2976: 'std::basic_string' : too few template arguments.
Es scheint redundant mit Iostream .
Hat jemand erfolgreich die Kombination von Boost, Iostream und WDK, um zusammenzuarbeiten?
Meine Quellen-Datei:
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;
}
Vielen Dank für Ihre Erfahrungen. Ich versuchte mit USE_LIBCMT = 1 anstelle von msvcrt, aber Probleme blieben. Angesichts der Tatsache, dass sogar STL problematisch ist, muss ich das WDK noch einmal überdenken. –
Wir bauen unsere App Teil w/VS200x und den Treiber nur mit dem WDK. Beachten Sie, dass das ddkbuild-Dienstprogramm nur eine Wrapper-Batchdatei über die Befehlszeilenargumente ist (ich benutze es die ganze Zeit) und es wird wahrscheinlich nicht helfen, Compilerprobleme zu lösen. – dirkgently
Ich schlug vor, ddkbuild für das Erstellen von Treibern zu verwenden und Standard vs Projekt zu verwenden, um die Anwendung zu erstellen. Sie werden eine Lösung haben, dass eines der Projekte (Treiber) mit einem benutzerdefinierten Build mit ddkbuild und einem zweiten Build (Boost) erstellt wird. – Ilya