membros da classe estática na biblioteca compartilhada
-
06-07-2019 - |
Pergunta
Eu tenho uma classe como
class K {
static int a;
static int b;
}
Eu gostaria de criar uma biblioteca compartilhada (DLL) que contém este K
classe. Em um arquivo CPP compliled na chamada biblioteca de I
int K::a = 0;
int K::b = 0;
para instanciar as variáveis ??estáticas. A dll faz compilação sem erros, mas quando eu uso a biblioteca, eu recebo o erro símbolo externo não resolvido para o K::a
membros e K::b
. No programa principal onde eu quiser usá-lo, eu incluo o mesmo cabeçalho com a declaração do K
classe, a única diferença é que para o class __declspec( dllexport ) K { ... }
I uso da biblioteca e para o principal class K { ... }
programa
Provavelmente estou fazendo mais do que um erro tão minhas perguntas seria, como eu posso
- informar o vinculador para compartilhar a classe membro estático na biblioteca?
- usar os membros da classe estática instanciado na biblioteca no programa principal?
PS. Eu uso o Visual Studio 2008 ...
Solução
Um deve usar __declspec( dllimport )
no cabeçalho na aplicação principal.
Então, aqui está a solução. O arquivo de cabeçalho (incluído em ambos a biblioteca eo aplicativo principal) é:
#ifdef COMPILE_DLL
#define DLL_SPEC __declspec( dllexport )
#else
#define DLL_SPEC __declspec( dllimport )
#endif
class DLL_SPEC K {
static int a;
static int b;
}
O arquivo CPP na biblioteca contém:
int K::a = 0;
int K::b = 0;
Para compilar a biblioteca tem para definir o COMPILE_DLL macro, para a aplicação principal não deve ser definido.
Outras dicas
Fazer a ligação a biblioteca estaticamente em vez de dinamicamente.
Ou adicione uma função global na DLL que retorna os valores.