1

VisualStudio ではなく WDK でブースト ライブラリを使用する c plus plus プロジェクトをコンパイルしたいと考えています。

私のコンピューターの OS は Windows7-64bit、WDK のバージョンは 7.6、Boost ライブラリのバージョンは 1.51 です。

ソース コード プロジェクトをコンパイルすると、WDK コンパイラで次のエラーが発生します。

e:\lib\boost_1_51_0\boost\array.hpp(72) : error C2039: 'ptrdiff_t' : is not a member of 'std' .

プロジェクト全体のファイルの内容は次のとおりです。

ファイル ソース:

TARGETTYPE=PROGRAM
TARGETNAME=helloworld

UMENTRY=main
USE_MSVCRT=1
USE_NATIVE_EH=1

#
# use iostream package and STL
#
USE_IOSTREAM=1
USE_STL=1
STL_VER=70

#
# my boost library root directory
#
BOOST_INC_PATH=E:\lib\boost_1_51_0

INCLUDES=$(BOOST_INC_PATH)
TARGETLIBS=$(SDK_LIB_PATH)\user32.lib

SOURCES=HelloWorld.cpp

UMTYPE=console
UMBASE=0x4000000

ファイル HelloWorld.cpp:

#include <iostream>
#include <vector>
#include <string>
#include <boost/array.hpp> 

void InvokeVector()
{
    //invoke STL's vector
    std::vector<std::string> vec;
    vec.push_back("Entry ");
    vec.push_back("of ");
    vec.push_back("Vector");
    vec.push_back("……\n");
    //print vec
    for (int i=0; i<vec.size(); i++) {
        std::cout<<vec.at(i);
    }
}

void InvokeBoost()
{
    //invoke Boost's array<T, N>
    boost::array<int, 3> arr = {1, 2, 3};
    for (int i=0; i<arr.size(); i++) {
        std::cout<<"arr["<<i<<"]"<<"is" <<arr[i]<<std::endl;
    }
}

int main()
{
//  InvokeVector();  //run normally
    InvokeBoost(); //it will occure an error
    return 0;
}

この問題の解き方を教えてください。どんな助けでも大歓迎です!

4

2 に答える 2

0

簡単な答え: いいえ。

ただし、一部は移植できます。

ここでよく説明されています: The NT Insider:Guest Article: C++ in an NT Driver

カーネルにおける C++ の主な問題の 1 つは、言語の「優れた」機能のほとんどがそのモードで直接利用できないことです。簡単に再現できるものもありますが、その方法を見ていきます。ただし、カーネル例外と同じではない C++ 例外など、いくつかの機能を忘れる必要があります。

このような機能は、カーネル モードではサポートされていないため、単純に忘れる必要があります。翻訳: コンパイルされません。時間とエネルギーがあれば、カーネル モードへの移植を試みることもできますが、率直に言って、例外はカーネル モードでは遅すぎます。これは、C++ コーディング スタイルに影響を与えるため、注意が必要です。

于 2012-09-14T02:40:04.197 に答える