Compartilhar via


Aviso do compilador (nível 2) C4275

classe de interface não DLL 'class_1' usada como base para a classe de interface DLL 'class_2'

Uma classe exportada foi derivada de uma classe que não foi exportada.

Para minimizar a possibilidade de corrupção de dados ao exportar uma classe com __declspec(dllexport), verifique se:

  • Todos os dados estáticos são acessados por meio de funções exportadas da DLL.

  • Nenhum método embutido da classe pode modificar dados estáticos.

  • Nenhum método embutido de sua classe usa funções CRT ou outras funções de biblioteca que usam dados estáticos.

  • Nenhuma função de classe embutida usa funções CRT ou outras funções de biblioteca em que você acessa dados estáticos.

  • Nenhum método de sua classe (independentemente de estar embutida) pode usar tipos em que a instanciação no EXE e na DLL tenha diferenças de dados estáticos.

Você pode evitar a exportação de classes definindo uma DLL que define uma classe com funções virtuais e funções que você pode chamar para instanciar e excluir objetos do tipo. Em seguida, você pode simplesmente chamar funções virtuais no tipo.

O C4275 poderá ser ignorado no Visual C++ se você estiver derivando de um tipo na Biblioteca Padrão do C++, compilando uma versão de depuração (/MTd) e quando a mensagem de erro do compilador se referir a _Container_base.

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