Exportation de classes contenant std :: objets à partir d'une DLL
Lors de l'exportation de classes contenant des objets comme std :: vecteurs et std :: chaînes depuis une DLL, un avertissement, tel que "class 'std::map<_Kty,_Ty>' nécessite une interface DLL pour être utilisée par les clients de la classe 'FontManager'", peut survenir. Cet avertissement indique que les types de membres de la classe nécessitent qu'une interface DLL soit accessible par le code client.
Déclaration avancée des conteneurs standard
Pour résoudre ce problème, transférez les déclarations de classe avec DLL_EXPORT peuvent être placées avant les variables membres, comme indiqué ci-dessous :
template class DLL_EXPORT std::allocator<tCharGlyphProviderRef>; template class DLL_EXPORT std::vector<tCharGlyphProviderRef,std::allocator<tCharGlyphProviderRef> >; std::vector<tCharGlyphProviderRef> m_glyphProviders;
Bien que cette approche puisse supprimer les avertissements, elle ne garantit pas la disponibilité de l'interface DLL pour les fonctions membres.
Exigences de l'interface DLL
Pour garantir une fonctionnalité DLL appropriée, les classes et leurs fonctions membres doivent avoir une interface DLL. Cela signifie que le compilateur génère la fonction dans la DLL elle-même, la rendant importable. Le fait de ne pas fournir cette interface pour les membres accessibles par le code client entraînera des avertissements ou des erreurs lors de la compilation ou de la liaison.
Membres privés et avertissements
Membres privés non accessibles aux clients peut être exempté des déclarations DLL_EXPORT. Les avertissements pour ces membres peuvent être désactivés. Cependant, des précautions doivent être prises pour les destructeurs et les constructeurs générés par le compilateur.
Gestion des membres exportables par Dll
Les membres qui doivent être utilisés par les clients nécessitent soit :
Instanciation des classes de modèles
Les déclarations directes des classes de modèles avec DLL_EXPORT créent uniquement des instanciations dans l'unité de compilation actuelle. Cette approche est insuffisante pour les classes sans modèle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!