Maison > Article > développement back-end > Comment exporter des classes contenant des objets `std::` à partir d'une DLL ?
Introduction
Exportation Les classes contenant des objets complexes tels que des vecteurs et des chaînes d'une DLL soulèvent des inquiétudes concernant les exigences de l'interface DLL. Cet article analyse le problème et explore des solutions pour exporter de telles classes tout en traitant les avertissements du compilateur.
Avertissements du compilateur
Lors de la tentative d'exportation d'une classe contenant des objets std::, le compilateur peut émettre des avertissements concernant les membres nécessitant une interface DLL. Ces avertissements indiquent que le compilateur ne peut pas garantir que les méthodes de la classe exportée sont disponibles pour les clients utilisant la DLL.
Déclarations avancées
Une approche pour répondre à ces avertissements consiste à utiliser transmettre les déclarations avec DLL_EXPORT. Bien que cela puisse supprimer les avertissements, cela n’exporte pas réellement les méthodes requises. Pour résoudre complètement le problème, les classes contenant les objets std:: doivent être marquées comme DLL_EXPORT dans leur unité de compilation.
Accessibilité des membres
Tous les membres d'un fichier exporté la classe doit être DLL_EXPORT. Les membres privés qui ne sont pas accessibles aux clients peuvent être ignorés ou voir leurs avertissements désactivés. Cependant, les membres avec lesquels les clients peuvent interagir doivent exporter leurs méthodes.
Solutions possibles
Selon le scénario, plusieurs approches peuvent être envisagées :
Déclarations avant et instanciation
La déclaration avant d'une classe de modèle avec DLL_EXPORT crée une instanciation dans l'unité de compilation actuelle. Cependant, cela ne s'applique qu'aux spécialisations de modèles et non aux classes concrètes, qui doivent être explicitement marquées comme DLL_EXPORT.
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!