【问题标题】:How do I use boost library with WDK environment如何在 WDK 环境中使用 boost 库
【发布时间】:2012-09-12 07:27:05
【问题描述】:

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

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

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

【问题讨论】:

  • 我怀疑您是否可以在 WDK 中“按原样”使用 boost,请参阅以下链接:stackoverflow.com/questions/718309/…。但是,您可以尝试修补所需的 boost 库。
  • 你的项目是驱动吗?如果没有,为什么要使用 WDK 构建它?
  • 亲爱的 Igor R:我正在开发一个 dokan 库用户模式应用程序,dokan 库要求使用 WDK 但 vs2010 构建,所以,我很困惑如何在 WDK 环境中构建我的 dokan 应用程序。跨度>

标签: boost wdk


【解决方案1】:

简短回答:不。

但你可以移植一些。

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

C++ 的主要问题之一 内核是该语言的大多数“好”功能都不是 在该模式下直接可用。有些很容易重新创建,我们将 看看怎么做。但是,应该忘记某些功能,例如 C++异常,与内核异常不同。

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

【讨论】:

  • 我想在VS2010中运行Dokan库的mirror.c示例,但是失败了。所以我按照 Dokan 的官方选项在 WDK 中构建镜像示例,但是我的用户模式应用程序中包含一些 C++ 语言,这就是为什么我问之前是否有人让 WDK 支持 C++。 dokan-dev.net/en/docs
【解决方案2】:

更长的答案 - 是的

只需添加

typedef int ptrdiff_t;

在拉入提升标头之前,一切都会很好地进行基本提升

【讨论】:

    猜你喜欢
    • 2010-10-17
    • 2012-02-09
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    相关资源
    最近更新 更多