Maison > développement back-end > C++ > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-11-09 22:23:02
original
655 Les gens l'ont consulté

How do You Export Classes Containing std:: Objects from a DLL?

Exportation de classes contenant des objets std:: à partir d'une DLL

Lorsque vous tentez d'exporter des classes contenant des objets std::, tels que des vecteurs ou des chaînes, à partir d'une DLL, vous peut rencontrer des avertissements sur la nécessité d'une interface DLL. Cet avertissement est déclenché lorsque le compilateur détecte que les membres de types complexes au sein de la classe ne sont pas explicitement marqués pour l'exportation de DLL.

La déclaration directe des types de membres avec DLL_EXPORT peut résoudre partiellement le problème. Cependant, pour garantir une bonne exportation des fonctions membres, les classes correspondantes dans leur unité de compilation doivent également être marquées comme DLL_EXPORT.

Cette exigence provient du fait que le compilateur ne peut pas déterminer quelles méthodes de la classe sont utilisées par les clients. de la classe DLL_EXPORTed. Par conséquent, il impose que toutes les méthodes accessibles doivent être exportées. Ignorer l'avertissement et le désactiver n'est pas conseillé dans ce contexte.

Pour répondre à l'avertissement pour les membres non exportables en DLL, les approches suivantes peuvent être envisagées :

  • Désactivez l'avertissement : Ceci est approprié pour les membres privés ou les membres auxquels les clients ne peuvent pas accéder.
  • Créer des wrappers ou des méthodes d'indirection : Cela implique la création de méthodes wrapper DLL_EXPORT ou la création de méthodes d'indirection , cachant efficacement la mise en œuvre interne aux clients.
  • Utilisez PIMPL : Cet idiome permet de réduire le nombre de membres visibles de l'extérieur, minimisant ainsi le problème.

Dans le exemple fourni, en déclarant la spécialisation de modèle std::allocator avec DLL_EXPORT génère une instanciation de la spécialisation de modèle au sein de l'unité de compilation actuelle. Cela crée les méthodes pour std::allocator dans la DLL, y compris leurs exportations. Cependant, cette approche n'est pas appropriée pour les classes concrètes, car elle ne prend en charge que l'instanciation de classes modèles.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal