2009-04-05 11 views
8

Visual Studio 2005 yerine kullanıcı alanı uygulama oluşturmak için Windows Sürücü Seti'ni (WinDDK 6001.18001) kullanıyorum. Bu yaklaşımı alıyorum çünkü sürücü bileşenlerini de oluşturmamız gerekiyor, bu yüzden tek bir yapı ortamına sahip olmayı tercih ediyorum. herşeyi inşa et. Microsoft, bu yaklaşımı birkaç ürün için kullanıyor.Uygulamalar için WDK derleme ortamında destek kullanmak?

Bu Boost 1.38.0 kullanmaya başlamadan iyi çalışıyordu. Çekirdek modu bileşenlerinde C++ kullanmıyorum, sadece kullanıcı alanı uygulamaları. C++ kodunda, destek kitaplıklarını kullanmak doğaldır. Ne yazık ki, WDK aynı fikirde değil.

ettim ilk hatası "#include < > cstddef" boost\lambda\detail\operator_return_type_traits.hpp birkaç hataları bu çevrede çalışma Ek D'gerektirdiği sol görünüyor olarak yaklaşık error C2976: 'std::basic_string' : too few template arguments. O iostream ile gereksiz görünür std ad alanında ptrdiff_t koymak olmamasıdır .

Herkes birlikte çalışmak için Boost, iostream ve WDK kombinasyonunu başarıyla aldı mı?

Muhbirlerimin dosyası:

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; 
} 

cevap

1

İlginç bir soru. STL'yi kullanarak, WDK ile kendi başına bir meydan okuma oldu. Ben ötesine geçemedim. Bunu deneyebilirim. Unutmayın, WDK'nın VS2005/VS2008'inizinkiyle aynı olmayan kendi derleyicisi vardır (sürüm numaralarını kontrol edin). Burada ve orada bir kaç böcek var gibi görünüyor. Not: USE_MSVCRT=1 ve USE_STL=1'un, en azından (en azından WDK 6001 için) iyi gelmediğini unutmayın. Not:

+0

Deneyiminizi paylaştığınız için teşekkür ederiz. Msvcrt yerine USE_LIBCMT = 1 kullanmayı denedim, ancak sorunlar devam etti. STL'nin bile sorunlu olduğu düşünüldüğünde, WDK'yı tekrar gözden geçirmem gerekecek. –

+0

Uygulama bölümümüzü w/VS200x ve sürücüyü sadece WDK ile oluşturuyoruz. Not, ddkbuild yardımcı programı sadece komut satırı argümanları üzerinde bir sarmalayıcı toplu iş dosyasıdır (her zaman kullanırım) ve muhtemelen derleyici sorunlarının çözülmesine yardımcı olmaz. – dirkgently

+0

Ben sürücü için ddkbuild kullanmak ve uygulamayı oluşturmak için standart vs proje kullanarak önerdi. Projelerden birinin (sürücü) ddkbuild ve ikincisi (Yükseltme) kullanılarak özel derleme ile oluşturulacak bir çözümünüz olacak. – Ilya

0

Farklı yollardan gitmenizi öneririm, yani VS200.x sürücüsünü this (ddkbuild) güzel aracını kullanarak derlerim.

Kendimi bir komut satırı kişisi ve makefileları mümkün olan her yerde kullanarak, karmaşık proje için yararlı olmayan derleme yardımcı programı buluyorum.Çalışma programı içinde tonlarca sınırlama var ve projenizi derlemek için VS ortamını kullanmanızı tavsiye ederim.

Ddkbuild'de bir howto olup olmadığından emin değilim, ancak ddkbuild.bat'ı VS özel derleme seçeneğine entegre etmek doğrudur.

+0

Teşekkürler, muhtemelen bu rotaya gideceğim. –

+1

IMMHO, Derleme hatası olduğunda ddkbuild biraz yardımcı olur. – dirkgently

+0

% 100 emin değilim ama hataları ve uyarıları VS günlüğünde görüntülemek mümkün olduğunu düşünüyorum, ancak herhangi bir şekilde komut satırından oluşturmak ile aynı hataları görmek için günlük dosyaları açmak gerekir. – Ilya

1

Yükseltme, sorunlarınız için zaten bir çalışma alanı içerebilir, ancak kullanmakta olduğunuz derleyiciyi tanımıyor olmadığından uygulamayı uygulamamaktadır (büyük olasılıkla sürücülerin nadiren güç kullanması nedeniyle). MSVC için derleyici geçici çözümlerinin etkinleştirildiğinden emin olmak için boost/config/select_compiler_config.hpp ve boost/config/compiler/visualc.hpp incelemeyi (ve muhtemelen düzenleme) deneyin (ve boost/config/compiler/visualc.hpp).

İlgili konular