Maison >développement back-end >C++ >Comment exporter des classes contenant des objets `std::` à partir d'une DLL ?

Comment exporter des classes contenant des objets `std::` à partir d'une DLL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-10 05:04:02900parcourir

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

Exportation de classes contenant std:: Objets (Vecteur, Carte, etc.) à 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ésactiver les avertissements : Pour les membres non exportables, les avertissements peuvent être désactivés pour éviter l'encombrement.
  • Wrappers d'exportation de DLL : Créez des fonctions de wrapper d'exportation de DLL ou méthodes d'indirection pour les membres qui doivent être exportés.
  • Idiome PIMPL : Utilisez l'idiome PIMPL pour réduire le nombre de membres visibles de l'extérieur.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn