c++ - 将应用程序转换为使用 dll。类 'std::map<_Kty,_Ty>' 需要有 dll 接口(interface)才能被类的客户端使用

标签 c++ dll templates

这似乎是一个常见的错误,但网上的大多数人都选择忽略警告并继续前进。我不想忽略警告。

基本上,当使用 __declspec(dllexport) 将项目转换为使用 dll 时,编译器在处理模板和 STL 对象时会遇到麻烦。列出了问题的解释和建议的解决方案 here .我已经实现了为 map 建议的巨型#define 语句,但无济于事。

你是怎么做到的!?我的代码中到处都是 wchar_ts 和 std::maps 之类的东西,所以希望有一个解决方案不涉及为每个类编写一些远程复杂的东西!

最佳答案

阅读this similar thread对这个话题进行很好的讨论。我会建议以下任一方法:

  1. 使用静态库
  2. 在非template 后面隐藏所有template 相关的类型和接口(interface)compiler firewallpimpl .

在与从 Visual C++ 6.0 到 2003,再到 2005 的链接器更改作斗争之后,我将永远不会 __declspec(dllexport) 任何具有 模板 的东西,boolwchar_ttime_t 再次出现在签名中。实际上,我们完全停止使用 DLL。现在的生活简单多了 ;)

关于c++ - 将应用程序转换为使用 dll。类 'std::map<_Kty,_Ty>' 需要有 dll 接口(interface)才能被类的客户端使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1557158/

相关文章:

c++ - undefined symbol : __gnat_rcheck_CE_Invalid_Data when linking ADA with C++

c++ - 如何准备在单个 Windows 环境中生成 .dll 和 unix .so 的构建作业?

c++ - 如何调用用c++编写的程序调用我用c编写的DLL

c++ - 在 lambda 表达式和模板 typedef 习语中提取对成员

c++ - 这是部分功能模板特化吗?

c++ - 为什么在代码 "456"+1,输出是 "56"

c++ - 滚动区域内的 QWidget

c# - SqlCeConnection 处理中的访问冲突异常

c++ - 如何检查类型是否由 typedef 定义或在模板参数中使用

python - boost C++ 方法返回不同的对象类型