Upozornění kompilátoru (úroveň 2) C4275
non - DLL-interface třída 'class_1' použitá jako základ pro třídu rozhraní DLL 'class_2'
Exportovaná třída byla odvozena z třídy, která nebyla exportována.
Chcete-li minimalizovat možnost poškození dat při exportu třídy s __declspec(dllexport), ujistěte se, že:
Všechna statická data jsou přístupná prostřednictvím funkcí, které jsou exportovány z knihovny DLL.
Statické data nemohou upravovat žádné vložené metody vaší třídy.
Žádné vložené metody vaší třídy používají funkce CRT nebo jiné funkce knihovny, které používají statická data.
Žádné vložené funkce třídy nepoužívají funkce CRT ani jiné funkce knihovny, kde přistupujete ke statickým datům.
Žádné metody vaší třídy (bez ohledu na vkládání) mohou používat typy, ve kterých instance v exe a DLL mají statické rozdíly dat.
Vyhnete se exportu tříd definováním knihovny DLL, která definuje třídu s virtuálními funkcemi, a funkce můžete volat vytvoření instance a odstranění objektů typu. Pak můžete jednoduše volat virtuální funkce typu.
C4275 lze v jazyce Visual C++ ignorovat, pokud pocházíte z typu ve standardní knihovně jazyka C++, kompilujete ladicí verzi (/MTd) a kde chybová zpráva kompilátoru odkazuje _Container_base
na .
// C4275.cpp
// compile with: /EHsc /MTd /W2 /c
#include <vector>
using namespace std;
class Node;
class __declspec(dllimport) VecWrapper : vector<Node *> {}; // C4275