【问题标题】:Can std::error_category be used across dlls?可以跨 dll 使用 std::error_category 吗?
【发布时间】:2015-09-18 15:48:16
【问题描述】:

我有一个 Windows dll,它会抛出 std::system_errors,类别为 std::system_category()

如果它们被 dll 捕获,没问题我可以将它们与 std::error_condition' 进行比较。但是,如果我在链接到 dll 的 exe 中捕获,则比较总是失败,因为该上下文中的 std::system_category() 不 == 捕获的异常中的那个。

我很难理解这是否应该工作并且存在错误,或者是否不应该支持?

dll 和 exe 都链接到 CRT 的相同 dll 版本。

另外,如果 dll 和 exe 链接到 CRT 的静态版本,我想这不会起作用?

我读过this description of std::system_category,(强调我的):

获取对静态错误类别对象的错误引用 由操作系统报告。

【问题讨论】:

    标签: c++ c++11 visual-studio-2013 dll stl


    【解决方案1】:

    这是 Visual C++ 2013 中的一个错误。它已在 Visual C++ 2015 中修复。

    【讨论】:

    • 好的,谢谢。我的问题的第二部分错了,也许你也知道答案:“如果 dll 和 exe 链接到 CRT 的静态版本,我想这不会起作用?”
    • @ScottLangham 无论您如何链​​接事物,这在 Visual C++ 2013 中根本不起作用; operator== 将比较两个不同模块中error_category 对象的地址并返回false。在 Visual C++ 2015 中,如果两个模块都链接到 Visual C++ 库 DLL,它工作。如果您将 Visual C++ 2015 库静态链接到每个模块中,那么这仍然会起作用,尽管非常不建议这样做,
    • @JamesMcNellis 它是如何工作的?通常将库静态链接到不同的 DLL 会复制所述静态库的所有内容。我希望自己的变量具有相同的功能。
    猜你喜欢
    • 2018-02-03
    • 2021-08-21
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多