none
Dúvidas sobre código nativo (ATL + MFC) RRS feed

  • Pergunta

  •  

    Amigos, estou estudando sobre MFC no momento, no entanto,  não estou achando um bom livro sobre o assunto, e nem sempre tutoriais ou apostilas baixadas da internet satisfazem as dúvidas.

    Preciso saber de duas coisas, quem puder me ajudar:

    1 - Um bom livro sobre ATL e MFC (um, outro, ou os dois) de preferência em português;

     

    2 - Sobre desempenho, eu estou querendo fugir do .NET (Veja bem, nada contra, ele tem suas vantagens), e queria fazer aplicativos que não necessitassem do netframework instalado na máquina cliente. Fui informado que utilizando ATL ou MFC vc não precisa deles, no entanto, qualquer aplicativo feito no visual studio 2008 (win32, ATL, MFC) só rodam se o mesmo estiver instaldo.

    Estou querendo criar aplicativos que não necessitem da "maquina virtual" do netframework.

    E compilando os mesmos projetos por outro editor como o codebloks por exemplo, o aplicativo roda em qualquer máquina sem problemas (e me pareceram com maior desempenho, suspeito eu que o visual studio não está deixando o código de forma nativa, e está usando a máquina virtual da mesma forma, mesmo sendo API nativa).

    Desculpem-me se estou falando besteiras, e se eu estiver por favor me corrijam, pois ainda estou estudando sobre o assunto.

     

    segunda-feira, 8 de dezembro de 2008 23:36

Respostas

  • Olá Marcelo,

     

     Marcelo Developer wrote:
    Claro que se for pra fazer algo pra servidor mantenho somente em win32 como tenho feito, mais estou querendo aprender a trabalhar com forms e seguindo a mesma idéia, Java para produção e C++ para performace.

     

    Novamente, não sei que tipo de aplicações você pretende desenvolver, mas como disse acima, acho que você deveria fazer alguns testes de performance com o .NET Framework primeiro, antes de tomar qualquer decisão.

     

     Marcelo Developer wrote:

    O que ocorre, pelo que percebí é que todo aplicativo feito no visual studio precisa do netframework instalado, mesmo que seje um aplicativo de win32 apenas, um simples hello word! e eu gostaria de entender o porquê?,

     

    Como eu disse acima, não tem nada a ver com o .NET Framework... O que você precisa é da runtime do Visual C++ (CRT) e outras bibliotecas que você utilize (MFC, ATL).

     

    Você pode ter essas bibliotecas distribuidas juntamente com o executável, em DLLs separadas, ou então pode incorporar essas bibliotecas dentro do EXE, de forma que você possa apenas enviar o executável sozinho para a máquina, sem precisar de mais nada.

     

    O artigo abaixo mostra as diferentes maneiras que você pode utilizar para distribuir uma aplicação desenvolvida em Visual C++.

     

    Sugiro que leia com atenção, especialmente a seção "Statically linking the executables":

     

    Bootstrapper for the VC++ 2005 Redists (with MSI 3.1)
    http://www.codeproject.com/KB/cpp/vcredists_x86.aspx

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quarta-feira, 10 de dezembro de 2008 09:43

Todas as Respostas

  • Olá Marcelo,

     

     Marcelo Developer wrote:

    1 - Um bom livro sobre ATL e MFC (um, outro, ou os dois) de preferência em português;

     

    Em Português, não conheço, mas é fato que os melhores livros estão sempre em Inglês.

     

    MFC e ATL, embora ainda existam, já são assunto "velho" e sinceramente não faz muito sentido desenvolver novas aplicações utilizando essas tecnologias, exceto casoss raros.

     

    Todos os novos livros de C++ já falam de C++/CLI, onde você desenvolve aplicações na linguagem C++, mas utilizando o .NET Framework na mesma... Abaixo tem alguns bons livros (bem antigos) sobre MFC:

     

    C How to Program: AND Getting Started with Microsoft Visual C++ 6 with an Introduction to MFC

    http://www.amazon.com/How-Program-Getting-Microsoft-Introduction/dp/0582849209/ref=sr_1_36?ie=UTF8&s=books&qid=1228866975&sr=1-36

     

    Visual C++ MFC Programming by Example
    http://www.amazon.com/Visual-C-MFC-Programming-Example/dp/0879305444/ref=sr_1_1?ie=UTF8&s=books&qid=1228866895&sr=1-1

     

    Professional MFC With Visual C++ 6
    http://www.amazon.com/Professional-MFC-Visual-C-6/dp/1861000154/ref=sr_1_4?ie=UTF8&s=books&qid=1228866895&sr=1-4

     

    Introduction to MFC Programming with Visual C++ (Microsoft Technologies Series)
    http://www.amazon.com/Introduction-Programming-Visual-Microsoft-Technologies/dp/0130166294/ref=sr_1_2?ie=UTF8&s=books&qid=1228866895&sr=1-2

     

     

    O livro mais atual que conheço sobre Visual C++ que fala "um pouquinho" sobre MFC, é esse:

     

    Ivor Horton's Beginning Visual C++ 2008
    http://www.amazon.com/Ivor-Hortons-Beginning-Visual-2008/dp/0470225904/ref=sr_1_1?ie=UTF8&s=books&qid=1228866431&sr=1-1

     

     

     Marcelo Developer wrote:

    2 - Sobre desempenho, eu estou querendo fugir do .NET (Veja bem, nada contra, ele tem suas vantagens), e queria fazer aplicativos que não necessitassem do netframework instalado na máquina cliente. Fui informado que utilizando ATL ou MFC vc não precisa deles, no entanto, qualquer aplicativo feito no visual studio 2008 (win32, ATL, MFC) só rodam se o mesmo estiver instaldo.

     

    Você pode dizer que tipo de aplicação você pretende desenvolver? É que acho que você ainda não experimentou o .NET Framework pra valer, para ver se a performance é realmente um problema...

     

    Se você quer ir pelo C++, não há problema, mas acho que não deveria ir para MFC/ATL a menos que fosse imprescindível... Acho que deveria ir para o C++/CLI ou talvez para o C# direto...

     

     

     Marcelo Developer wrote:

    E compilando os mesmos projetos por outro editor como o codebloks por exemplo, o aplicativo roda em qualquer máquina sem problemas (e me pareceram com maior desempenho, suspeito eu que o visual studio não está deixando o código de forma nativa, e está usando a máquina virtual da mesma forma, mesmo sendo API nativa).

    Desculpem-me se estou falando besteiras, e se eu estiver por favor me corrijam, pois ainda estou estudando sobre o assunto.

     

    Na verdade, quando você desenvolve uma aplicação usando MFC ou ATL, você precisa levar essas bibliotecas junto com o seu executável (ou em DLLs separadas, ou então encapsuladas dentro do seu executável)... 

     

    Isso não tem nada a ver com o .NET Framework... São apenas bibliotecas que você utiliza, e que precisa levar junto, caso a máquina não tenha essas bibliotecas instaladas.

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quarta-feira, 10 de dezembro de 2008 00:03
  • .NET ou não .... eis a questão...

    Na verdade caio, para programar vizando produção, eu utilizo o Java, mais já tive problemas quanto a performace, por isso estou elegendo o C++ e venho estudando a um bom tempo. Ví alguns aplicativos que foram desenvolvidos em .NET, de um amigo meu, realmente, a produção é indiscutível. No entanto, já tive problemas com servidores feitos em Java quanto a performace, e é claro que se há a necessidade de uma máquina virtual fazendo um meio de campo, a performace sempre irá cair.

    Claro que se for pra fazer algo pra servidor mantenho somente em win32 como tenho feito, mais estou querendo aprender a trabalhar com forms e seguindo a mesma idéia, Java para produção e C++ para performace.

     

    Quanto ao uso do framework e as dlls:

    O que ocorre, pelo que percebí é que todo aplicativo feito no visual studio precisa do netframework instalado, mesmo que seje um aplicativo de win32 apenas, um simples hello word! e eu gostaria de entender o porquê?, será que ele está compilando todo meu código para uso da maquina virtual? ou ao contrário do codeblocks, o visual studio não compila com as bibliotecas necessárias junto com o executável e precisa do netframework para "completar".

    Porque eu digo isso:

    Compile um código qualquer em qualquer outra IDE, uso por exemplo o codeblock (copilador: GNU GCC Compiler)

    Se você fiser uma aplicação nessa IDE por exemplo, um simples cout << "olá"; E fizer o mesmo código no Visual Studio, observará que o que foi feito no codeblock, roda em qualquer computador sem precisar de nada. E o visual studio sem o netframework não funciona.

    E acredite, eu pelo menos sinto que há uma diferença de velocidade, pode ser impressão, mais ainda não rodei aplicativo "pesado" nos dois pra saber.

    O que está me deixando com a dúvida se está utilizando a máquina virtual ou não é a sensação de desempenho ao executar os aplicativos.

    É isso que eu gostaria de entender.

     

    Obrigado quanto aos livros, é uma pena não termos algo escrito em português, é sofrido ler em inglês, mais fazer o que... vamos lá.

     

     

    quarta-feira, 10 de dezembro de 2008 01:00
  • Olá Marcelo,

     

     Marcelo Developer wrote:
    Claro que se for pra fazer algo pra servidor mantenho somente em win32 como tenho feito, mais estou querendo aprender a trabalhar com forms e seguindo a mesma idéia, Java para produção e C++ para performace.

     

    Novamente, não sei que tipo de aplicações você pretende desenvolver, mas como disse acima, acho que você deveria fazer alguns testes de performance com o .NET Framework primeiro, antes de tomar qualquer decisão.

     

     Marcelo Developer wrote:

    O que ocorre, pelo que percebí é que todo aplicativo feito no visual studio precisa do netframework instalado, mesmo que seje um aplicativo de win32 apenas, um simples hello word! e eu gostaria de entender o porquê?,

     

    Como eu disse acima, não tem nada a ver com o .NET Framework... O que você precisa é da runtime do Visual C++ (CRT) e outras bibliotecas que você utilize (MFC, ATL).

     

    Você pode ter essas bibliotecas distribuidas juntamente com o executável, em DLLs separadas, ou então pode incorporar essas bibliotecas dentro do EXE, de forma que você possa apenas enviar o executável sozinho para a máquina, sem precisar de mais nada.

     

    O artigo abaixo mostra as diferentes maneiras que você pode utilizar para distribuir uma aplicação desenvolvida em Visual C++.

     

    Sugiro que leia com atenção, especialmente a seção "Statically linking the executables":

     

    Bootstrapper for the VC++ 2005 Redists (with MSI 3.1)
    http://www.codeproject.com/KB/cpp/vcredists_x86.aspx

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quarta-feira, 10 de dezembro de 2008 09:43
  • Agora sim! Caio, eu tinha entendido, porém estava achando muito estranho a dependência do netframework, não estava achando que era só bibliotecas, estava me parecendo que estava rodando sobre a máquina virtual, agora que li aquele tutorial que me enviou, eu conseguí rodar em uma máquina sem ele, comprovei que ele não está rodando o aplicativo sobre a máquina virtual, está enterrada a dúvida.

    O GNU compila com todas as bilbiotecas juntas, por isso que rodava sem nenhum problema, ao passo que o visual studio se não setar aquele valor, ele não compila, e fica na dependência dessas bibliotecas.

     

    Obrigado pela resposta.

     

     

     

    quinta-feira, 11 de dezembro de 2008 02:01