首页 > 后端开发 > C++ > 正文

如何从 DLL 导出包含 std:: 对象的类?

Linda Hamilton
发布: 2024-11-16 18:52:03
原创
587 人浏览过

How to Export Classes Containing std:: Objects from a DLL?

从 DLL 导出包含 std:: 对象的类

从 DLL 导出包含 std::vectors 和 std::strings 等对象的类时DLL、警告,例如“class 'std::map<_kty>'需要“FontManager”类的客户端使用 dll 接口”,可能会出现。此警告表明该类的成员类型需要 DLL 接口才能由客户端代码访问。

标准容器的转发声明

要解决此问题,请转发带有 DLL_EXPORT 的类声明可以放在成员变量之前,如下所示:

template class DLL_EXPORT std::allocator<tCharGlyphProviderRef>;
template class DLL_EXPORT std::vector<tCharGlyphProviderRef,std::allocator<tCharGlyphProviderRef> >;
std::vector<tCharGlyphProviderRef> m_glyphProviders;
登录后复制

虽然这种方法可能会删除警告,它不保证成员函数的 DLL 接口的可用性。

DLL 接口要求

为了确保正确的 DLL 功能,类及其成员函数必须具有DLL 接口。这意味着编译器在 DLL 本身内生成函数,使其可导入。如果未能为客户端代码可访问的成员提供此接口,将导致在编译或链接期间出现警告或错误。

私有成员和警告

客户端无法访问私有成员可以免除 DLL_EXPORT 声明。可以禁用对此类成员的警告。但是,应谨慎对待编译器生成的析构函数和构造函数。

Dll 可导出成员处理

客户端必须使用的成员需要:

  • Dll 导出包装器: 创建从对成员执行操作的 DLL 导出的代理函数。
  • 间接方法: 实现为成员提供间接访问的方法,并导出这些方法。
  • PIMPL 惯用法: 使用私有实现 (PIMPL) 惯用法来降低外部可见性

模板类的实例化

使用 DLL_EXPORT 的模板类的前向声明仅在当前编译单元内创建实例化。这种方法对于非模板类来说是不够的。

以上是如何从 DLL 导出包含 std:: 对象的类?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板