Partager via


Avertissement du compilateur (niveau 2) C4275

classe non -DLL-interface 'class_1' utilisée comme base pour la classe d’interface DLL 'class_2'

Une classe exportée a été dérivée d’une classe qui n’a pas été exportée.

Pour réduire la possibilité d’altération des données lors de l’exportation d’une classe avec __declspec(dllexport), assurez-vous que :

  • Toutes vos données statiques sont accessibles via des fonctions exportées à partir de la DLL.

  • Aucune méthode inline de votre classe ne peut modifier les données statiques.

  • Aucune méthode inline de votre classe n’utilise de fonctions CRT ou d’autres fonctions de bibliothèque qui utilisent des données statiques.

  • Aucune fonction de classe inline n’utilise de fonctions CRT ou d’autres fonctions de bibliothèque, où vous accédez aux données statiques.

  • Aucune méthode de votre classe (indépendamment de l’incorporation) ne peut utiliser de types où l’instanciation dans l’EXE et la DLL ont des différences de données statiques.

Vous pouvez éviter d’exporter des classes en définissant une DLL qui définit une classe avec des fonctions virtuelles et des fonctions que vous pouvez appeler pour instancier et supprimer des objets du type. Vous pouvez ensuite simplement appeler des fonctions virtuelles sur le type.

C4275 peut être ignoré dans Visual C++ si vous dérivez d’un type dans la bibliothèque standard C++, en compilant une version de débogage (/MTd) et où le message d’erreur du compilateur fait référence._Container_base

// C4275.cpp
// compile with: /EHsc /MTd /W2 /c
#include <vector>
using namespace std;
class Node;
class __declspec(dllimport) VecWrapper : vector<Node *> {};   // C4275