Pergunta

Estou tentando escrever uma DLL de modo misto, vamos chamá-lo de 'cliente', para substituir algumas classes não gerenciadas por seus equivalentes gerenciados. Tudo funciona bem na minha máquina pessoal, mas quando eu verifico o código -fonte, nossa máquina de construção não criará o projeto. Ele não reconhece as classes gerenciadas que estou usando de outra DLL, chamada 'Core'.

Eu acho que a questão tem a ver com cabeçalhos pré -compilados. Aqui está o porquê:

Para usar as classes do 'Core', adicionei uma referência ao projeto 'Core' no projeto 'Client'. Se eu remover essa referência e construir o projeto na minha máquina pessoal, ele ainda funciona. O CLR PCH não recompile depois de remover a referência. Se eu recomponho o CLR PCH e, em seguida, compilar o projeto, ele falha com os mesmos erros que recebo na máquina de construção: as classes gerenciadas não são reconhecidas.

Parece -me que as classes gerenciadas das DLLs que você importa são definidas no cabeçalho pré -compilado. Não consegui verificar isso, mas esse é o melhor palpite que tenho. Alguém tem alguma ideia de que pode derramar sobre esse assunto? As referências do projeto no DLL misto são resolvidas colocando ganchos no PCH gerenciado?

Passos para reproduzir

O seguinte não faz sentido para mim:

  1. Faça com que o cliente construa.
  2. Remova a referência do cliente para o núcleo. Compilar cliente. O cliente ainda constrói. Isso não é esperado.
  3. Recompilar o cliente PCH e depois compilar o cliente. O cliente de compilação falha: as classes no 'núcleo' são indefinidas. Este é o comportamento esperado.
  4. Adicione referência ao núcleo, compilar. Compilar o cliente falha pelo mesmo motivo. Isso não é esperado
  5. Recompilar o cliente PCH e depois compilar o cliente. O cliente compila bem.

Minha conclusão deste experimento é que as referências são inseridas no projeto por meio de cabeçalhos pré -compilados e que algo está quebrado com a maneira como isso funciona, pelo menos em nossa máquina de construção.

Foi útil?

Solução

Há outra maneira de adicionar referências a uma DLL de modo gerenciada / mista no C ++ / CLI - é adicionar #Using Core.dll ao cliente. Isso pode resolver seu problema de construção.

Outras dicas

Não pode funcionar assim, porque você não precisa usar um cabeçalho pré -compilado.
Tudo o que um PCH faz é permitir que você acelere a construção.
Não faz nada de especial com referências ...

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