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