【问题标题】:different errno on vs 2010 and 2015与 2010 和 2015 不同的 errno
【发布时间】:2015-12-03 17:26:55
【问题描述】:

我在一个项目中有 C++ 代码,它与 Visual Studio 2010 和 VS 2015 的行为不同。

    if(return_val != 0)
    {
      ACE_OS::set_errno_to_last_error ();
      result->set_error(errno);
    }

return_val 是先前失败的函数的返回值。所以下一步是捕获错误值。

在 VS 2010 中

当调用 result->set_error(errno) 时,在调试时,控制转到在 source \VC\crt\src\dosmap.c 中定义的函数 _errno() 。

在 VS 2015 中 找不到源 dosmap.c。 我想 errno 的宏扩展必须在不同的地方。但是行为应该是一样的

我需要对 2015 年的 VS 设置进行任何更改吗? 任何帮助都会很有用。

【问题讨论】:

  • 我不太明白你的问题。有什么不工作吗?为什么在哪里定义 errno 很重要?
  • 在 VS 2010 中,errno 设置为值 2。而在 VS 2015 中,它设置为 0。

标签: c++ visual-studio-2010 ace


【解决方案1】:

我认为您尚未安装库的源文件。这可以解释为什么它找不到文件。

errno 是一个奇怪的变量,并且是线程本地的,并且在两个平台上都是宏的。 ACE_OS::set_errno_to_last_error (); 发生了什么?

如果函数没有设置 errno 值,这将解释行为差异。

【讨论】:

  • ACE_OS::set_errno_to_last_error ();这个 errno = ::GetLastError ();哪个库的源文件?我做了 2015 年的默认安装
猜你喜欢
  • 2017-07-30
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 2016-02-05
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
相关资源
最近更新 更多