Compartir a través de


Advertencia del compilador (nivel 2) C4275

se ha usado una clase que no es de una interfaz DLL "class_1" como base para una clase de interfaz DLL "class_2"

Observaciones

Una clase exportada derivaba de una clase que no se exportó.

Para minimizar la posibilidad de que se produzcan daños en los datos al exportar una clase con __declspec(dllexport), asegúrese de que:

  • A los datos estáticos se accede a través de funciones que se exportan desde el archivo DLL.

  • Ninguno de los métodos insertados de la clase puede modificar los datos estáticos.

  • Ninguno de los métodos insertados de la clase usa funciones de CRT u otras funciones de biblioteca que usan datos estáticos.

  • Ninguna de las funciones de clase insertadas usa funciones de CRT, u otras funciones de biblioteca, en las que se accede a datos estáticos.

  • Ninguno de los método de la clase (independientemente de la inserción) puede usar tipos en los que la creación de instancias en archivos EXE y DLL tienen diferencias de datos estáticos.

Para evitar exportar clases, defina un archivo DLL que defina una clase con funciones virtuales y funciones a las que puede llamar para crear instancias y eliminar objetos del tipo. Luego, solo puede llamar a las funciones virtuales en el tipo.

C4275 se puede omitir en Visual C++ si deriva de un tipo en la biblioteca estándar de C++, compila una versión de depuración (/MTd) y en donde el mensaje de error del compilador hace referencia _Container_base.

Example

En el ejemplo siguiente se genera la advertencia C4275:

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