Pergunta

Estou fazendo alguma manutenção em um C ++ janelas biblioteca DLL que é necessário para trabalhar com diferentes compiladores VC ++ (como eu não quero abordar diferentes esquemas de nomenclatura ter sido).

Eu já eliminaram qualquer uso da STL na interface.

Eu tenho segurado que corrupção de pilha não vai ocorrer a partir da mistura de diferentes novos / exclusão de.

O item final é exceções. Posso lançar uma exceção e esperar que ele seja capturado corretamente por uma versão diferente do compilador?

Foi útil?

Solução

Mesmo considerando o seu comentário adicional: Este irá falhar sempre que MS muda tanto ABI do compilador ou o layout de classe da classe de exceção (es) ou até mesmo com diferentes configurações do compilador . Na verdade, a última falha pode causar até mesmo com o mesma compilador.

Então eu acho que a resposta é: Não, você não pode fazer isso com segurança. Se você quer passar objetos não-POD entre executáveis, devem ser compiladas com o mesmo compilador, a mesma biblioteca std, eo mesmo (até certo ponto) configurações do compilador.

Outras dicas

Eu esperaria que ser até o fornecedor do compilador, eu não acho que especifica padrão como as exceções estão a ser implementado, por isso não pode lhe garantir uma implementação coerente.

Provavelmente não. Cada versão do compilador terá o seu próprio ambiente de tempo de execução que é completamente inconsciente do outro ambiente. A menos que o fornecedor declara explicitamente que isso é possível é mais provável não é possível.

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