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 ...

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top