Visual Studio 2005 대신 사용자 공간 응용 프로그램을 빌드하는 데 Windows Driver Kit (WinDDK 6001.18001)을 사용하고 있습니다. 드라이버 구성 요소를 만들어야하기 때문에이 방법을 사용하고 있습니다. 따라서 단일 빌드 환경을 가지고 싶습니다. 모든 것을 만들어라. Microsoft는이 방법을 여러 제품에 사용합니다.응용 프로그램의 WDK 빌드 환경에서 향상 기능을 사용하고 있습니까?
부스트 1.38.0을 사용하기 전까지는 정상적으로 작동했습니다. 커널 모드 구성 요소에서 C++을 사용하지 않고 userspace 응용 프로그램 만 사용합니다. C++ 코드에서는 부스트 라이브러리를 사용하는 것이 당연합니다. 아쉽게도 WDK는 동의하지 않습니다.
내가주의 첫 번째 오류는 "#INCLUDE < > cstddef"boost\lambda\detail\operator_return_type_traits.hpp
에 몇 가지 오류를이 문제를 해결 근무 부록 D.에 필요한 왼쪽 보인다 대한 error C2976: 'std::basic_string' : too few template arguments.
그것은 iostream과 중복 표시, std 네임 스페이스에 ptrdiff_t
을 두지 않는다는 것입니다 .
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;
}
경험을 공유해 주셔서 감사합니다. msvcrt 대신 USE_LIBCMT = 1을 사용해 보았지만 문제가 남아있었습니다. STL조차도 문제가 있다는 것을 감안할 때 WDK를 다시 생각해야 할 것입니다. –
우리는 VS200x 및 우리의 app 부분을 WDK로만 빌드합니다. 참고로, ddkbuild 유틸리티는 명령 줄 인수에 대한 래퍼 배치 파일이며 (필자는 항상 사용합니다) 컴파일러 문제를 정렬하는 데는 도움이되지 않습니다. – dirkgently
ddkbuild를 사용하여 드라이버를 만들고 표준 vs 프로젝트를 사용하여 응용 프로그램을 빌드 할 것을 제안했습니다. 프로젝트 (드라이버) 중 하나가 ddkbuild를 사용하여 사용자 정의 빌드로 빌드하고 두 번째 (부스트)가 표준 빌드를 작성하는 솔루션을 갖게됩니다. – Ilya