【问题标题】:My c++ project works in vc++ 2008 but not in vc++ 2010我的 c++ 项目在 vc++ 2008 中有效,但在 vc++ 2010 中无效
【发布时间】:2012-06-14 07:27:22
【问题描述】:

我有两个 vc++ dll 项目,它们将生成两个 dll。一个

vector<vector<string>> 

对象将从一个 dll 传递到另一个 dll。这两个项目都配置为多线程调试 dll。两者都可以在 vc++ 2008 和 vc++ 2010 上成功编译。但是,只有从 vc++ 2008 项目生成的 dll 才能工作。这些 dll 将被另一个在 MSDEV 6.0 版下编译的 dll 使用。所以我的问题是为什么

vector<vector<string>>

在 vc++ 2010 构建的 dll 之间不能传递对象?谢谢:)

【问题讨论】:

  • 在大多数情况下,在 vc++ 2008 和 2010 中生成的 dll 不兼容。前几天上班碰到这个。我不记得有异常,但我的 vs2010 代码在尝试调用 vs2008 dll 时会崩溃。

标签: c++ dll


【解决方案1】:

如果您计划为 DLL 和使用它的代码使用不同的编译器版本,则不能在 DLL 接口中使用 STL 类型。

vector 和 string 的实现可能不同(在你的情况下它们似乎确实如此),你会遇到这样的问题。

【讨论】:

  • 我很惊讶 VC++ 2008 编译的 DLL 可以与 VC6 编译的 DLL 一起工作。
【解决方案2】:

VC++ 2010 使用新的 C++11 标准,该标准涉及对向量等模板容器的重大更改(首先使用右值引用和移动语义)。

如果您要共享这样的库,通常最安全的选择是为所有内容创建简单、无聊的标准 C 接口函数。毕竟,这些几乎无处不在。然后可以按照您认为合适的任何方式完成内部实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多