Usando DLLs C ++ com diferentes versões do compilador
Esta questão está relacionada a"Como criar binários DLL consistentes nas versões do VS?"
Temos aplicativos e DLLs criados com o VC6 e um novo aplicativo criado com o VC9. O aplicativo VC9 deve usar DLLs compiladas com o VC6, a maioria escrita em C e uma em C ++.A biblioteca C ++ é problemática devido a problemas de decoração / desconfiguração de nomes.Compilar tudo com o VC9 atualmente não é uma opção, pois parece haver alguns efeitos colaterais. Resolver estes seria bastante demorado.Posso modificar a biblioteca C ++, no entanto, ela deve ser compilada com o VC6.A biblioteca C ++ é essencialmente um invólucro de OO para outra biblioteca C. O aplicativo VC9 usa algumas funções estáticas e outras não estáticas.Embora as funções estáticas possam ser manipuladas com algo como
// Header file
class DLL_API Foo
{
int init();
}
extern "C"
{
int DLL_API Foo_init();
}
// Implementation file
int Foo_init()
{
return Foo::init();
}
não é tão fácil com os métodos não estáticos.
Como eu entendo,Chris Becke's A sugestão de usar uma interface semelhante ao COM não me ajudará, porque os nomes dos membros da interface ainda serão decorados e, portanto, inacessíveis a partir de um binário criado com um compilador diferente.Estou bem aí?
A única solução seria escrever uma interface DLL de estilo C usando manipuladores para os objetos ou estou faltando alguma coisa? Nesse caso, eu acho, provavelmente teria menos esforço usando diretamente a biblioteca C empacotada.