代码之家  ›  专栏  ›  技术社区  ›  Jerry

如何在WDK环境中使用boost库

  •  1
  • Jerry  · 技术社区  · 13 年前

    我想编译我的c plus plus项目,该项目使用WDK而不是VisualStudio的boost库。

    我的电脑操作系统是Windows7-64位,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;
    }
    

    你能教我如何解决这个问题吗?任何帮助都将不胜感激!

    2 回复  |  直到 13 年前
        1
  •  0
  •   Peter    13 年前

    简短回答:没有。

    但你可以移植一些。

    这里有很好的解释: The NT Insider:Guest Article: C++ in an NT Driver

    中C++的主要问题之一 核心是该语言的大多数“漂亮”特性不是 在该模式下直接可用。有些很容易重现,我们会 看看怎么做。然而,有些功能应该被遗忘,例如 C++异常,这与内核异常不同。

    这些功能不得不被遗忘,因为没有支持 对于内核模式下的它们。翻译:不编译。如果你有 您可能尝试将它们移植到内核模式的时间和精力,但是 坦率地说,异常对于内核模式来说太慢了。这将有一个 对您的C++编码风格的影响,这是您应该保持的 介意

        2
  •  0
  •   user176145 user176145    8 年前

    较长的答案-是

    只需添加

    typedef int ptrdiff_t类型定义;

    在拉进助推头之前,一切都会好起来,以获得基本的助推