这似乎是一个常见的错误,但网上的大多数人都选择忽略警告并继续前进。我不想忽略警告。
基本上,当使用 __declspec(dllexport) 将项目转换为使用 dll 时,编译器在处理模板和 STL 对象时会遇到麻烦。列出了问题的解释和建议的解决方案 here .我已经实现了为 map 建议的巨型#define 语句,但无济于事。
你是怎么做到的!?我的代码中到处都是 wchar_ts 和 std::maps 之类的东西,所以希望有一个解决方案不涉及为每个类编写一些远程复杂的东西!
最佳答案
阅读this similar thread对这个话题进行很好的讨论。我会建议以下任一方法:
- 使用静态库
- 在非
template
后面隐藏所有template
相关的类型和接口(interface)compiler firewall或pimpl
.
在与从 Visual C++ 6.0 到 2003,再到 2005 的链接器更改作斗争之后,我将永远不会 __declspec(dllexport)
任何具有 模板
的东西,bool
、wchar_t
或 time_t
再次出现在签名中。实际上,我们完全停止使用 DLL。现在的生活简单多了 ;)
关于c++ - 将应用程序转换为使用 dll。类 'std::map<_Kty,_Ty>' 需要有 dll 接口(interface)才能被类的客户端使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1557158/