Usar bibliotecas de tempo de execução do VC ++ 2010 no projeto VC ++ 2008

9

Eu trabalho no algoritmo de otimização para que o desempenho realmente importe. O algoritmo é cerca de 8 vezes mais rápido quando compilado no VS 2010 comparado ao VS 2008. Googling mostra que não é minha culpa (ver, por exemplo, link ). O problema é que o projeto final deve ser construído no VS 2008.

A solução que eu tento é construir meu algoritmo como DLL no VS 2010 e vinculá-lo ao projeto principal. É possível usar bibliotecas de tempo de execução do VC ++ 2010 com minha DLL no VS 2008? Em caso afirmativo, qual é a maneira menos dolorosa de fazer isso? Alguma outra ideia? Obrigado.

    
por AdelNick 27.08.2012 в 15:39
fonte

3 respostas

1

Se você pedir qualquer outra maneira de combinar as bibliotecas 2008 e 2010 em um executável diferente de mover parte externa para uma DLL em 2010, a resposta provavelmente é "não há outra maneira fácil de conseguir isso".

Mas se você não quiser "bibliotecas de tempo de execução VC ++ 2010 ... sob o VS 2008" (que está construindo em comparação com as bibliotecas de 2010 no IDE de 2008), mas "use uma DLL compilada em 2010 em 2008- programa compilado ", é perfeitamente possível.

A maneira mais fácil, como fazemos em nossos projetos, é construir (tanto .exe quanto DLL) contra bibliotecas padrão vinculadas estaticamente (MFC, se você usá-las) e, em seguida, usar LoadLibrary em seu .exe para carregar a DLL. Na DLL você pode exportar ( _declspec (dllexport) ) uma função (preferencialmente dentro de extern "C" {} guards) e usá-la no .exe através de GetProcAddress .

Ligação estática e carregamento explícito evitam muitos bugs de inconsistência causados por diferentes tempos de execução.

Se você está preocupado com os custos de carregamento de DLL e de chamada de função, pode tentar tornar essas chamadas o mais raras possível (talvez movendo não apenas o algoritmo, mas também algumas lógicas mais de alto nível na DLL). Veja este issie também.

E você pode criar todo o seu código em um IDE (2010) usando multitargeting nativo (no entanto, você ainda precisará criar seu aplicativo principal e DLL separadamente nas bibliotecas v9 e v10, respectivamente).

    
por Steed 27.08.2012 / 16:39
fonte
3

Os tempos de execução não são um problema. Nada impede que você vincule sua DLL ao tempo de execução do VC2010 e, em seguida, use essa DLL em outros projetos. Não importa se esses projetos são criados usando o Visual C ++ 2008 ou qualquer outro idioma.

A parte complicada é projetar a interface DLL. Simplesmente exportar algumas classes C ++ é arriscado, pois expõe você a incompatibilidades entre os diferentes compiladores. Eu acho que sua melhor aposta seria expor uma interface de estilo C ou usar COM. Eu acho que COM é a melhor abordagem, mas se você não estiver familiarizado com a tecnologia, então uma interface de estilo C funcionará bem. (COM também poderia ser over-kill se a interface é simples.)

    
por Peter Ruderman 27.08.2012 / 16:09
fonte
1

Você pode, se tiver cuidado, e a documentação do MS fornece algumas dicas. Eu já respondi esta pergunta antes:

Querendo saber se a versão inferior do visual studio pode usar a dll construída usando uma versão superior do visual studio?

    
por user52875 27.08.2012 / 17:19
fonte