从 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_EXPORT 的模板类的前向声明仅在当前编译单元内创建实例化。这种方法对于非模板类来说是不够的。
以上是如何从 DLL 导出包含 std:: 对象的类?的详细内容。更多信息请关注PHP中文网其他相关文章!