2

我有两个 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 之间传递?谢谢:)

4

2 回答 2

8

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

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

于 2012-06-14T07:31:16.333 回答
0

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

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

于 2012-06-14T07:36:28.987 回答