Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
nicht - DLL-Interface-Klasse 'class_1' wird als Basis für DLL-Interface-Klasse 'class_2' verwendet
Bemerkungen
Eine exportierte Klasse wurde von einer Klasse abgeleitet, die nicht exportiert wurde.
Um die Möglichkeit einer Datenbeschädigung beim Exportieren einer Klasse mit __declspec(dllexport) zu minimieren, stellen Sie folgendes sicher:
Auf alle statischen Daten wird über Funktionen zugegriffen, die aus der DLL exportiert werden.
Keine Inline-Methoden Ihrer Klasse können statische Daten ändern.
Keine Inline-Methoden Ihrer Klasse verwenden CRT-Funktionen oder andere Bibliotheksfunktionen, die statische Daten verwenden.
Keine inlineierten Klassenfunktionen verwenden CRT-Funktionen oder andere Bibliotheksfunktionen, bei denen Sie auf statische Daten zugreifen.
Keine Methoden Ihrer Klasse (unabhängig von der Inlinierung) können Typen verwenden, bei denen die Instanziierung in der EXE und DLL statische Datenunterschiede aufweisen.
Sie können das Exportieren von Klassen vermeiden, indem Sie eine DLL definieren, die eine Klasse mit virtuellen Funktionen definiert, und Funktionen, die Sie aufrufen können, um Objekte des Typs instanziieren und löschen zu können. Sie können dann einfach virtuelle Funktionen für den Typ aufrufen.
C4275 kann in Visual C++ ignoriert werden, wenn Sie von einem Typ in der C++-Standardbibliothek ableiten, eine Debugversion (/MTd) kompilieren und auf die Compilerfehlermeldung verweist _Container_base.
Example
Im folgenden Beispiel wird C4275 generiert:
// C4275.cpp
// compile with: /EHsc /MTd /W2 /c
#include <vector>
using namespace std;
class Node;
class __declspec(dllimport) VecWrapper : vector<Node *> {}; // C4275