Como faço para decidir se a utilização ATL, MFC, Win32 ou CLR para um projeto novo C ++?

StackOverflow https://stackoverflow.com/questions/821676

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu estou apenas começando meu primeiro projeto C ++. Estou usando Visual Studio 2008 . É um aplicativo de formulário único Windows que acessa um par de bancos de dados e inicia uma transação WebSphere MQ. Eu basicamente entender as diferenças entre ATL, MFC, Win32 (eu sou um pouco vago sobre aquele na verdade) e CLR, mas eu estou em uma perda a respeito de como eu deveria escolher.

É um ou mais destes apenas para compatibilidade com versões anteriores?

é CLR uma idéia ruim?

Todas as sugestões apreciado.

Editar: Eu escolhi C ++ para este projeto por razões que não entram em no post, que não são totalmente técnico. Então, assumindo C ++ é a única / melhor opção, que eu devo escolher?

Foi útil?

Solução

Tudo depende das suas necessidades.

Usando o CLR irá fornecer-lhe o mais conjunto expressivo de bibliotecas (todo o framework .NET), ao custo de restringir o seu executável para exigir que o .NET framework para ser instalado em tempo de execução, bem como limitá-lo ao plataforma Windows (no entanto, todos os 4 tecnologias listadas são únicas janelas, portanto a limitação plataforma é provavelmente o menos problemático).

No entanto, CLR requer que você use as extensões de C ++ / CLI para a linguagem C ++, então você vai, em essência, necessidade de aprender alguma linguagem de recursos extras, a fim de usar este. Se o fizer, dá-lhe muitos "extras", como o acesso às bibliotecas .net, coleta de lixo completa, etc.

ATL & MFC são um pouco mais complicado para decidir entre os dois. Eu encaminhá-lo para página do MSDN para a escolha de a fim de decidir entre eles. A coisa agradável sobre ATL / MFC é que você não precisa do framework .NET, apenas o VC / MFC tempos de execução para ser instalado para implantação.

Usando Win32 fornece directamente os menores executáveis, com as dependências menor número, mas é mais trabalho para escrever. Você tem a menor quantidade de bibliotecas auxiliares, para que você está escrevendo mais do código.

Outras dicas

Win32 é a maneira crua, bare-metal de fazê-lo. É tedioso, difícil de usar, e tem um monte de pequenos detalhes que você precisa para se lembrar de outra forma as coisas vão falhar de forma relativamente misteriosas.

MFC se baseia em Win32 para fornecer-lhe uma maneira orientada a objetos de construção de sua aplicação. Não é um substituto para Win32, mas sim uma melhoria -. Ele faz um monte de trabalho duro para você

System.Windows.Forms (que é o que eu suponho que você quer dizer com CLR) é completamente diferente, mas tem grandes semelhanças com MFC de sua estrutura básica. É de longe o mais fácil de usar, mas exige que o .NET framework, que pode ou não pode ser um obstáculo no seu caso.

A minha recomendação: Se você precisa evitar NET, em seguida, usar MFC, caso contrário usar NET (na verdade, nesse caso, eu uso C #, pois é muito mais fácil trabalhar com).

Quanto C ++ vai, eu iria usar WTL. É lightweght e você terá poucos (se houver) dependências, tornando mais fácil de transportar e instalar. Acho que é muito gratificante quando meu aplicativo consiste em um único executável que será executado na maioria das versões do Windows, mas isso pode não ser uma preocupação para você.

Se você optar por ir .NET em vez disso, em seguida, C # é quase certamente o caminho a percorrer.

Mais em WTL aqui:

http://www.codeproject.com/KB/wtl/wtl4mfc1.aspx

Eu ficaria muito curioso para saber por que você faria isso em C ++ em tudo. Com base na sua descrição breve, C # parece uma escolha muito mais apropriado.

Apenas para elaborar um pouco, olhar para o link que você deu descrevendo a ++ CLR C. Os mais votados notas de resposta (com precisão, na minha opinião) que o C ++ é apropriado para "kernel, jogos, de alto desempenho e aplicativos de servidor." - nenhum dos quais parece descrever o que está fazendo

MFC, ATL, etc vão ser apoiadas no sentido de que, sim, você vai ser capaz de compilar seu aplicativo em versões futuras do Visual Studio e executá-los em futuras versões do Windows. Mas eles não estão apoiados no sentido de que não há um monte de desenvolvimento novo acontecendo na API ou a linguagem da mesma maneira que há no CLR e C #.

Não há nada de errado com CLR. Tal como outros aqui eu sugiro C #, mas como você tem razões para ficar com C ++, em seguida, usando a estrutura .NET é milhares de vezes mais fácil do que mexer com ATL / MFC, se você não estiver familiarizado com eles (IMO).

Pode valer a pena mencionar que se você estiver usando C ++ / CLR então você não está realmente usando C ++ em tudo. C ++ compila / CLR para CIL apenas como C #. Eu nunca usei isso sozinho, mas eu acredito que o seu propósito é permitir que você para compilar o código legado e torná-lo facilmente disponíveis para novo código .NET em vez de permitir novo código de trabalho com executáveis ??antigos C ++. Existem outros métodos de chamar código nativo de .NET que, talvez, você deve explorar.

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