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.

questionAnswers(5)

yourAnswerToTheQuestion