Partilhar via


Guia de portabilidade: MFC Scribble

Este tópico é o primeiro de vários tópicos que apresentam o procedimento de atualização para projetos do Visual Studio C++ que foram criados em versões mais antigas do Visual Studio para o Visual Studio 2017. Estes tópicos introduzem o processo de atualização por exemplo, começando com um projeto muito simples e passando para outros um pouco mais complexos. Neste tópico, trabalhamos através do processo de atualização para um projeto específico, MFC Scribble. É adequado como uma introdução básica ao processo de atualização para projetos C++.

Cada versão do Visual Studio apresenta possíveis incompatibilidades que podem complicar a movimentação de código de uma versão mais antiga do Visual Studio para uma mais recente. Às vezes, as alterações necessárias estão em seu código, então você deve recompilar e atualizar seu código, e às vezes as alterações necessárias são para os arquivos de projeto. Quando você abre um projeto que foi criado com uma versão anterior do Visual Studio, o Visual Studio pergunta automaticamente se você deve atualizar um projeto ou solução para a versão mais recente. Essas ferramentas geralmente atualizam apenas os arquivos do projeto; eles não modificam seu código-fonte.

Rabisco MFC

MFC Scribble é um exemplo bem conhecido que foi incluído em muitas versões diferentes do Visual C++. É uma aplicação de desenho simples que ilustra algumas das características básicas do MFC. Existem várias versões disponíveis, incluindo versões de código gerenciado e nativo. Neste exemplo, encontramos uma versão antiga do Scribble em código nativo do Visual Studio 2005 e a abrimos no Visual Studio 2017.

Antes de tentar atualizar, certifique-se de que tem a carga de trabalho do Ambiente de Trabalho do Windows instalada. Abra o instalador do Visual Studio (vs_installer.exe). Uma maneira de abrir o instalador é escolher Arquivo>Novo Projeto e rolar até a parte inferior da lista de modelos instalados até ver Abrir o Instalador do Visual Studio. Depois de abrir o instalador, você verá todas as cargas de trabalho disponíveis. Se a caixa para a carga de trabalho da Área de Trabalho do Windows não estiver selecionada, selecione-a e clique no botão Modificar na parte inferior da janela.

Em seguida, faça backup de toda a solução e de todo o seu conteúdo.

Finalmente, abra a solução na versão mais recente do Visual Studio e permita que o assistente converta o projeto.

Observe que você também pode executar devenv na linha de comando, usando a /Upgrade opção, em vez de usar o assistente para atualizar seus projetos. Consulte /Upgrade (devenv.exe). Isso pode ser útil para automatizar o processo de atualização para um grande número de projetos.

Passo 1. Convertendo o arquivo de projeto

Quando você abre um arquivo de projeto antigo no Visual Studio, o Visual Studio oferece para converter o arquivo de projeto para a versão mais recente, que aceitamos. A seguinte caixa de diálogo apareceu:

Revise a caixa de diálogo Alterações de projeto e solução.

Ocorreu um erro notificando-nos de que o destino Itanium não está disponível e não será convertido.

Platform 'Itanium' is missing from this project. All the configurations and their file configuration settings specific to this platform will be ignored. If you want this platform converted, please make sure you have the corresponding platform installed under '%vctargetpath%\platforms\Itanium'. Continue to convert this project without this platform?

Na época em que o projeto Scribble anterior foi criado, o Itanium era uma importante plataforma alvo. A plataforma Windows não suporta mais Itanium, então optamos por continuar sem suportar a plataforma Itanium.

Em seguida, o Visual Studio exibiu um relatório de migração listando todos os problemas com o arquivo de projeto antigo.

Captura de ecrã do Relatório de Atualização.

Nesse caso, os problemas resultaram todos de avisos, e o Visual Studio fez as alterações apropriadas no ficheiro de projeto. A grande diferença no que diz respeito ao projeto é que a ferramenta de construção mudou de vcbuild para msbuild. Essa alteração foi introduzida pela primeira vez no Visual Studio 2010. Outras alterações incluem alguma reorganização da sequência de elementos no próprio arquivo de projeto. Nenhuma das questões exigiu maior atenção para este projeto simples.

Passo 2. Fazer com que funcione

Antes de construir, verificamos o conjunto de ferramentas da plataforma para sabermos qual versão do compilador o sistema do projeto está usando. Na caixa de diálogo de propriedades do projeto, em Propriedades de Configuração, na categoria Geral , examine a propriedade Conjunto de Ferramentas da Plataforma . Ele contém a versão do Visual Studio e o número de versão da ferramenta de plataforma, que neste caso é v141 para a versão do Visual Studio 2017 das ferramentas. Quando você converte um projeto que foi originalmente compilado com o Visual Studio 2010, 2012, 2013 ou 2015, o conjunto de ferramentas não é atualizado automaticamente para o conjunto de ferramentas mais recente.

Para mudar para Unicode, abra as propriedades do projeto, em Propriedades de Configuração, escolha a seção Geral e localize a propriedade Conjunto de Caracteres . Altere isso de Usar conjunto de caracteres de vários bytes para Usar conjunto de caracteres Unicode. O efeito desta alteração é que agora as macros _UNICODE e UNICODE estão definidas e _MBCS não está, o que se pode verificar na caixa de diálogo de propriedades, na categoria C/C++, na propriedade Linha de Comando.

/GS /analyze- /W4 /Zc:wchar_t /Zi /Gm- /Od /Fd".\Debug\vc141.pdb" /Zc:inline /fp:precise /D "_AFXDLL" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX /Zc:forScope /Gd /Oy- /MDd /Fa".\Debug\" /EHsc /nologo /Fo".\Debug\" /Fp".\Debug\Scribble.pch" /diagnostics:classic

Embora o projeto Scribble não tenha sido configurado para compilar com caracteres Unicode, ele já foi escrito com TCHAR em vez de char, então nada realmente precisa ser alterado. O projeto é compilado com êxito com o conjunto de caracteres Unicode.

Agora crie a solução. Na janela de saída, o compilador nos diz que _WINNT32_WINNT não está definido:

_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)

Este é um aviso, não um erro, e é muito comum ao atualizar um projeto do Visual Studio C++. Esta é a macro que define qual a versão mais baixa do Windows em que nosso aplicativo será executado. Se ignorarmos o aviso, aceitamos o valor padrão, _WIN32_WINNT_MAXVER, que significa a versão atual do Windows. Para obter uma tabela de valores possíveis, consulte Usando os cabeçalhos do Windows. Por exemplo, podemos configurá-lo para ser executado em qualquer versão a partir do Vista.

#define _WIN32_WINNT _WIN32_WINNT_VISTA

Se o código usa partes da API do Windows que não estão disponíveis na versão do Windows especificada com essa macro, você verá isso como um erro do compilador. No caso do código Scribble, não há erro.

Passo 3. Teste e depuração

Como não há nenhuma suíte de testes, iniciámos o aplicativo e verificámos as suas funcionalidades manualmente através da interface gráfica. Não foram observados problemas.

Passo 4. Melhorar o código

Agora que você migrou para o Visual Studio 2017, convém fazer algumas alterações para aproveitar os novos recursos do C++. A versão atual do compilador C++ é muito mais compatível com o padrão C++ do que as versões anteriores, portanto, se você tem a mente de fazer algumas alterações de código para tornar seu código mais seguro e mais portátil para outros compiladores e sistemas operacionais, você deve considerar algumas melhorias.

Próximos passos

Scribble era um pequeno e simples aplicativo de desktop do Windows, e não era difícil de converter. Muitos aplicativos pequenos e simples são convertidos com a mesma facilidade para a nova versão. Para aplicativos mais complexos, com muito mais linhas de código, código legado mais antigo que pode não estar de acordo com os padrões de engenharia modernos, vários projetos e bibliotecas, etapas de compilação personalizadas ou para compilações automatizadas com script complexas, levará mais tempo para atualizar. Continue com o próximo exemplo, um aplicativo ATL/COM chamado COM Spy.

Ver também

Portabilidade e atualização: exemplos e estudos de caso
Próximo exemplo: COM Spy