ID do artigo: 810455 - Última revisão: terça-feira, 13 de novembro de 2007 - Revisão: 2.8

Como migrar um AppWizard personalizado do Visual C++ 6.0 para um assistente personalizado do Visual C++ .NET

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo descreve como criar um AppWizard personalizado no Visual C++ 6.0 e como migrar o Assistente para o Visual C++. NET.

INTRODUÇÃO

Este artigo passo a passo descreve como migrar um AppWizard personalizado do Microsoft Visual C++ 6.0 para um assistente personalizado do Microsoft Visual C++ .NET. A tecnologia do assistente personalizado no Visual C++ .NET é significativamente diferente da tecnologia AppWizard personalizada do Visual C++ 6.0. Você não é possível transferir um projeto AppWizard personalizado que foi criado no Visual C++ 6.0 diretamente para a nova tecnologia. No entanto, você pode reutilizar os arquivos de modelo existente e modificar as diretivas existentes para a nova sintaxe.

Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
  • Sistema operacional Microsoft Windows 2000 ou uma versão posterior
  • Microsoft Visual Studio 6.0
  • Microsoft Visual Studio .NET
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Microsoft Visual Studio 6.0
  • Microsoft Visual Studio .NET
  • Microsoft Visual C++ .NET

AppWizard personalizado do Visual C++ 6.0

Criar um AppWizard personalizado do Visual C++ 6.0

  1. Inicie o Visual C++ 6.0.
  2. No menu arquivo , clique em novo .

    A caixa de diálogo novo será exibida.
  3. Na caixa de diálogo novo , clique na guia projetos .
  4. Na guia projetos , clique em Personalizar AppWizard .
  5. Na caixa nome do projeto , digite MyVC6Custom e, em seguida, clique em OK .

    A caixa de diálogo Personalizar AppWizard - etapa 1 de 2 é exibida.
  6. Clique em seus próprio etapas personalizadas .
  7. No quantas etapas personalizadas você deseja? caixa, definir o número de etapas personalizadas para 0, clique em Concluir e, em seguida, clique em OK .
Um projeto de Custom AppWizard é chamado de "MyVC6Custom" é criado.


Criar arquivos de projeto personalizado

  1. Inicie o bloco de notas ou um aplicativo de editor de texto.
  2. No bloco de notas ou no seu editor de textos, cole o seguinte código: # IF
    #if !defined(AFX_STDAFX_H__6857DB3B_9305_41BF_BFB7_9DD42655FED5__INCLUDED_)
    #define AFX_STDAFX_H__6857DB3B_9305_41BF_BFB7_9DD42655FED5__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #define WIN32_LEAN_AND_MEAN	
    
    #include <stdio.h>
    #include <conio.h>
    
    #endif
    
  3. Salve o arquivo como SAfx.h na seguinte pasta:

    Path_to_VC6_Custom _AppWizard\MyVC6Custom\Template

    Observação Path_to_VC6_Custom _AppWizard é um espaço reservado para o caminho onde você criou o projeto MyVC6Custom.
  4. No bloco de notas ou no seu editor de textos, cole o seguinte código:
    #include "stdafx.h"
  5. Salve o arquivo como SAfx.cpp na seguinte pasta:
    Path_to_VC6_Custom _AppWizard\MyVC6Custom\Template
  6. No bloco de notas ou no seu editor de textos, cole o seguinte código:
    // Win32 Console Application: Defines the entry point for the console application.
    
    #include "stdafx.h"
    
    int main(int argc, char* argv[])
    {
    	printf("Hello World!\n");
    	getch();
    	return 0;
    }
  7. Salve o arquivo como Root.cpp na seguinte pasta:
    Path_to_VC6_Custom _AppWizard\MyVC6Custom\Template

Personalizar o projeto

  1. Localizar o código a seguir no arquivo de projeto MyVC6Custom MyVC6Customaw.cpp:
    void CMyVC6CustomAppWiz::CustomizeProject(IBuildProject* pProject)
    {
  2. Adicione o seguinte código após o código localizado na etapa 1:
    CComPtr<IConfigurations> pConfigs;
    HRESULT hr=pProject->get_Configurations(&pConfigs);
    if(FAILED(hr))
    {
    	AfxMessageBox("An error occurred while obtaining the IConfigurations interface pointer");
    	return;
    }
    CComPtr<IConfiguration> pConfig;
    CComVariant index;
    VARIANT m_var = {0};
    CComBSTR Name;
    CString text;
    CString output;
    
    long Count=0;
    pConfigs->get_Count(&Count);
    
    // Iterate through all the configurations of the project.
    for(int i=1; i <= Count; i++)
    {
    	index=i;
    	hr=pConfigs->Item(index, &pConfig);
    	if(FAILED(hr))
    	{
    		AfxMessageBox("An error occurred while obtaining the IConfiguration pointer");
    		return;
    	}
    	pConfig->get_Name(&Name);
    	text = Name;
    	
    	if (text.Find("Debug") == -1)
    		output = "Release";
    	else
    		output = "Debug";
    
    	text.Format("/out:\"%s/%s.exe\"",output,m_Dictionary["Root"]);
    	pConfig->AddToolSettings(L"link.exe", text.AllocSysString(), m_var);
    	
    	pConfig->AddToolSettings(L"mfc", L"0", m_var);
    	pConfig->AddToolSettings(L"link.exe", L"/subsystem:console", m_var);
    	pConfig->AddToolSettings(L"link.exe", L"/incremental:yes", m_var);
    	pConfig->AddToolSettings(L"link.exe", L"/machine:I386", m_var);
    	
    	// Change the preprocessor definitions.
    	pConfig->AddToolSettings(L"cl.exe", L"/nologo", m_var);
    	pConfig->AddToolSettings(L"cl.exe", L"/MLd", m_var);
    	pConfig->AddToolSettings(L"cl.exe", L"/W3", m_var);
    	pConfig->AddToolSettings(L"cl.exe", L"/Gm", m_var);
    	pConfig->AddToolSettings(L"cl.exe", L"/ZI", m_var);	
    	pConfig->AddToolSettings(L"cl.exe", L"/Od", m_var);
    	pConfig->AddToolSettings(L"cl.exe", L"/D \"WIN32\"", m_var);
    	pConfig->AddToolSettings(L"cl.exe", L"/D \"_DEBUG\"", m_var);
    	pConfig->AddToolSettings(L"cl.exe", L"/D \"_CONSOLE\"", m_var); 
    
    	// Change the libraries.
    	pConfig->AddToolSettings(L"link.exe", L"kernel32.lib", m_var);
    	pConfig->AddToolSettings(L"link.exe", L"user32.lib", m_var);
    	
    	pConfig=NULL;
    }
    pConfigs=NULL;	
  3. Adicione o seguinte código ao arquivo de projeto MyVC6Custom StdAfx.h:
    #include <atlbase.h>
    #include <ObjModel\bldguid.h> 
    #include <ObjModel\bldauto.h>

Copie os arquivos modelo para os diretórios de modelo

  1. Na janela do espaço de trabalho, clique na guia FileView , clique Arquivos de modelo com o botão direito do mouse e, em seguida, clique em Adicionar arquivos para pasta .

    A caixa de diálogo Inserir arquivos para o Project é exibida.
  2. Na caixa de diálogo Inserir arquivos no Project , localize a seguinte pasta:
    Path_to_VC6_Custom _AppWizard\MyVC6Custom\Template
  3. Adicione o arquivo Root.cpp, o arquivo SAfx.cpp e o arquivo SAfx.h à pasta arquivos de modelo.
  4. Na pasta arquivos de modelo, clique com o botão direito do mouse Confirm.inf , clique em Abrir e, em seguida, substitua o texto existente no arquivo Confirm.inf o seguinte texto:

    Aplicativo de console Win32 simples.
    Imprime "Hello, World!" para o console.
  5. Na pasta Arquivos de modelo , clique com o botão direito do mouse Newproj.inf , clique em Abrir e, em seguida, substitua o código existente no arquivo Newproj.inf com o código a seguir:
    $$// newproj.inf = template for list of template files
    $$//  format is 'sourceResName' \t 'destFileName'
    $$//    The source res name may be preceded by any combination of '=', '-',  '!', '?', ':', '#', and/or '*'.
    $$//       '=' => the resource is binary
    $$//       '-' => the file should not be added to the project (all files are added to the project by default)
    $$//       '!' => the file should be marked exclude from build
    $$//       '?' => the file should be treated as a Help file
    $$//       ':' => the file should be treated as a resource
    $$//       '#' => the file should be treated as a template (implies '!')
    $$//       '*' => bypass the custom AppWizard's resources when loading
    $$//	if name starts with / => create new subdir
    
    
    +root.cpp	$$Root$$.cpp
    +SAfx.h	StdAfx.h
    +SAfx.cpp	StdAfx.cpp
    
    Observação você deve separar o arquivo de nomes usando a tecla TAB. Não use a barra de espaços.
  6. No espaço de trabalho, clique na guia ResourceView , expanda MyVC6Custom recursos , clique com o botão direito do mouse em modelo e, em seguida, clique em Inserir .

    A caixa de diálogo Inserir recursos será exibida.
  7. Na caixa de diálogo Inserir recursos , clique em Importar .

    A caixa de diálogo Importar recursos será exibida.
  8. Na caixa arquivos do tipo , clique em todos os arquivos (*. *) e em seguida, localize a seguinte pasta:
    Path_to_VC6_Custom _AppWizard\MyVC6Custom\Template
  9. Clique em Root.cpp e em seguida, clique em Importar .

    A caixa de diálogo Tipo de recurso personalizado será exibida.
  10. Na caixa de diálogo Tipo de recurso personalizado , clique em modelo e, em seguida, clique em OK .

    O modelo IDR_TEMPLATE1 é adicionado para a pasta de modelo.
  11. Clique com o botão direito do mouse IDR_TEMPLATE1 , clique em Propriedades , digite "ROOT.CPP" na caixa identificação e, em seguida, pressione ENTER.
  12. Repita a etapa 11 para adicionar o arquivo SAfx.h e o arquivo SAfx.cpp à pasta TEMPLATE e renomear suas propriedades de identificação para "SAFX.H" e "SAFX.CPP", respectivamente.
  13. No menu arquivo , clique em Salvar tudo .
  14. No menu Build , clique em Rebuild All .
O AppWizard personalizado MyVC6Custom AppWizard é criado. O modelo MyVC6Custom AppWizard é adicionado para a guia projetos do Visual c++.


Assistente personalizado do Visual C++ .NET

Criar um assistente personalizado do Visual C++ .NET

  1. Inicie o Visual Studio NET..
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .

    A caixa de diálogo New Project é exibida.
  3. Em Project Types , clique em Projetos do Visual c++ .
  4. Em modelos , clique em Assistente personalizada .
  5. Na caixa nome , digite MyVC7Custom e, em seguida, clique em OK .

    A caixa de diálogo Assistente personalizada - MyVC7Custom aparece.
  6. Na caixa de diálogo Assistente personalizada - MyVC7Custom , clique em Configurações do aplicativo , clique para desmarcar a caixa de seleção de interface de usuário e em seguida, clique em Concluir .

Copie os arquivos modelo para os diretórios de modelo

  1. No Solution Explorer, expanda todas as pastas.
  2. Clique com o botão direito do mouse em ReadMe.txt e, em seguida, clique em Remover .
  3. Mover para a seguinte pasta:

    Path_to_VC6_Custom _AppWizard\MyVC6Custom\Templates
  4. Copie o arquivo Root.cpp, o arquivo SAfx.cpp e o arquivo SAfx.h para a pasta de \MyVC7Custom\Templates\1041 Path_to_VC7_Custom _Wizard

    Observação Path_to_VC7_Custom _Wizard é um espaço reservado para o caminho onde você criou o Assistente MyVC7Custom.
  5. Renomeie o arquivo SAfx.cpp para StdAfx.cpp e renomeie o arquivo SAfx.h para StdAfx.h.
  6. Clique Arquivos de modelo com o botão direito do mouse, aponte para Add e clique em Existing Item .
  7. A caixa Adicionar Item existente - MyVC7Custom é exibida.
  8. Na caixa de diálogo Add Existing Item - MyVC7Custom , localize a seguinte pasta:

    Path_to_VC7_Custom _Wizard\MyVC7Custom\Templates\1041

    Observação Path_to_VC7_Custom _Wizard é um espaço reservado para o caminho onde você criou o Assistente MyVC7Custom.
  9. Adicione o arquivo Root.cpp, o arquivo StdAfx.cpp e o arquivo StdAfx.h para a pasta Modelos.

Personalizar o projeto

  1. No Solution Explorer, clique com o botão direito do mouse Templates.inf e, em seguida, clique em Abrir .
  2. Substitua o código existente com o código a seguir:
    root.cpp
    StdAfx.cpp
    StdAfx.h
  3. No Solution Explorer, clique com o botão direito do mouse default.js e, em seguida, clique em Abrir .
  4. Localize o código a seguir no arquivo default.js:
    function AddFilters(proj)
    {
  5. Substitua o código existente na função AddFilters que localizou na etapa 4 com o seguinte código:
    try
    {
    	// Add the folders to your project.
     var strSrcFilter1 = wizard.FindSymbol('SOURCE_FILTER');
    	var strSrcFilter2 = wizard.FindSymbol('HEADER_FILTER');
    	var strSrcFilter3 = wizard.FindSymbol('RESOURCE_FILTER');
    	
    	var group1 = proj.Object.AddFilter('Source Files');
    	var group2 = proj.Object.AddFilter('Header Files');
    	var group3 = proj.Object.AddFilter('Resource Files');
    	
    	group1.Filter = strSrcFilter1;
    	group2.Filter = strSrcFilter2;
    	group3.Filter = strSrcFilter3;
    }
    catch(e)
    {
    	throw e;
    }
    a função AddFilters Especifica os filtros de origem para o projeto.
  6. Localize o código a seguir no arquivo default.js:
    function AddConfig(proj, strProjectName)
    {
  7. Substitua o código existente na função AddConfig localizado na etapa 6 com o código a seguir:
    try
    {
    	var config = proj.Object.Configurations('Debug');
    	config.IntermediateDirectory = 'Debug';
    	config.OutputDirectory = 'Debug';
    
    	var CLTool = config.Tools('VCCLCompilerTool');
    	CLTool.DebugInformationFormat = debugEnabled; 
    	CLTool.SuppressStartupBanner=true; 
    	CLTool.RuntimeLibrary=runtimeLibraryOption.rtMultiThreadedDebugDLL; 
    	CLTool.WarningLevel=warningLevelOption.warningLevel_3; 
    	CLTool.Optimization=optimizeOption.optimizeDisabled;
    	CLTool.MinimalRebuild=true;
    	CLTool.DebugInformationFormat=debugOption.debugEditAndContinue;
    	
    	var LinkTool = config.Tools('VCLinkerTool');
    	LinkTool.ProgramDatabaseFile = "$(outdir)/" + strProjectName + ".pdb"; 
    	LinkTool.GenerateDebugInformation = true;
    	LinkTool.LinkIncremental = linkIncrementalYes; 
    	LinkTool.OutputFile = "$(outdir)/" + strProjectName + ".exe";
    	LinkTool.SuppressStartupBanner=true;  // nologo
    	LinkTool.AdditionalDependencies="user32.lib";
    	LinkTool.AdditionalDependencies="kernel32.lib";
    
    	config = proj.Object.Configurations('Release');
    	config.IntermediateDirectory = 'Release';
    	config.OutputDirectory = 'Release';
    
    	var CLTool = config.Tools('VCCLCompilerTool');
    	// TODO: Add compiler settings.
    
    	var LinkTool = config.Tools('VCLinkerTool');
    	// TODO: Add linker settings.
    }
    catch(e)
    {
    	throw e;
    }
    A função AddConfig adiciona as configurações de projeto. Você pode fornecer as configurações de compilador e vinculador.
  8. Localize o código a seguir no arquivo default.js:
    function GetTargetName(strName, strProjectName)
    {
  9. Substitua o código existente na função GetTargetName que localizou na etapa 8 com o seguinte código:
    try
    {
    	var strTarget = strName;
    
    	if(strName == 'stdafx.h')
            strTarget = 'StdAfx.h';
    
        if(strName == 'stdafx.cpp')
            strTarget = 'StdAfx.cpp';
            
    	if(strName == 'root.cpp')
            strTarget = strProjectName + ".cpp";
    
    	return strTarget; 
    }
    catch(e)
    {
    	throw e;
    }
    a função GetTargetName obtém o nome do arquivo especificado.
  10. No Solution Explorer, clique com o botão direito do mouse MyVC7Custom.vsz e, em seguida, clique em Abrir .
  11. Localize o código a seguir no arquivo MyVC7Custom.vsz :
    Param="SOURCE_FILTER = txt"
  12. Substitua o código localizado na etapa 11 com o seguinte código:
    Param="SOURCE_FILTER = cpp"
    Param="HEADER_FILTER = h"
    Param="RESOURCE_FILTER = txt"
  13. No menu arquivo , clique em Salvar tudo .
  14. Localize a seguinte pasta:
    Path_to_VC7_Custom _Wizard\MyVC7Custom
  15. Copie o arquivo MyVC7Custom.ico, o arquivo MyVC7Custom.vsz e o arquivo MyVC7Custom.vsdir no seguinte local:
    Hard disk drivePasta \Microsoft 2003\Vc7\vcprojects o visual Studio .NET.
    Hard disk driveé um espaço reservado para a unidade onde o Visual Studio .NET 2003 está instalado.

    Observação Se você criou o assistente personalizado no Microsoft Visual Studio .NET 2002, copie o arquivo MyVC7Custom.ico, o arquivo MyVC7Custom.vsz e o arquivo MyVC7Custom.vsdir no seguinte local:
    Hard disk drive\Microsoft visual Studio .NET\Vc7\vcprojects pasta.
    Hard disk driveé um espaço reservado para a unidade onde o Visual Studio .NET 2002 está instalado.
O modelo de assistente personalizado MyVC7Custom é criado. Você pode usar o modelo para criar um simples aplicativo de console do Win32.

Mais Informações

VSZ o arquivo
O ponto de partida para cada assistente no Visual Studio .NET é o arquivo .vsz. Este arquivo .vsz é um arquivo de texto que determina o que o assistente é chamado e quais informações são passadas para o assistente. O arquivo contém um cabeçalho de duas linhas seguido pelos parâmetros opcionais que são passados para o assistente.

VSDir o arquivo
Um arquivo VSDir é um arquivo de texto com uma extensão de nome de arquivo .vsdir. O arquivo fornece informações para a caixa de diálogo Add Item e a caixa de diálogo New Project sobre como exibir os itens que contém o arquivo. Esses itens incluem seus nomes, a ordem em que aparecem e o ícone que é exibido com eles. Um único arquivo de VSDir contém registros para vários assistentes, pastas e modelos. Cada registro no arquivo de é separado por um novo caractere de linha. Caracteres de pipe (|) separam os campos em cada registro.

arquivo do JScript
Cada assistente personalizado cria um arquivo JScript chamado Default.js para cada projeto. Este arquivo contém funções que você pode usar para personalizar seu projeto. Você também pode adicionar suas próprias funções para o arquivo default.js para seu projeto.

Templates.inf o arquivo
O arquivo Templates.inf é um arquivo de texto que contém uma lista de modelos para seu projeto. Você pode usar as diretivas de modelo no arquivo Templates.inf para personalizar seu projeto. Lembre-se as seguintes informações quando você usa as diretivas de modelo:
  • Você não pode aninhar um [! se] diretiva em um [! loop] diretiva.
  • Você pode aninhar um [! loop] diretiva em outro [! loop] diretiva ou em [! se] / [! outra] diretivas.
  • Não há nenhum [! elif] diretiva. Você não pode aninhar [! se] diretivas no [! se] / [! outra] diretivas. Portanto, para diretivas de $ $ ELIF , você deve duplicar a lógica. Por exemplo, o código a seguir é um exemplo de um loop IF-ELSE, que é criado usando diretivas de modelo do Visual C++ 6.0:
    $$IF (macro1)
    // Some code 1
    $$ELIF (macro2)
    // Some code 2
    $$ENDIF

    Esse código pode ser convertido em código seguinte de acordo com as diretivas de modelo do Visual C++ .NET:
    [!if macro1]
    // Some code 1
    [!endif]
    [!if !macro1 and macro2]
    // Some code 2
    [!endif]
  • Você pode especificar comentários usando o exemplo a seguir:
    [!if 0]
    This is a comment.
    [!endif]


Referências

Para obter mais informações, visite os seguintes sites da Microsoft Developer Network (MSDN):
Criando AppWizards personalizado
http://msdn2.microsoft.com/en-us/library/Aa293241(VS.60).aspx (http://msdn2.microsoft.com/en-us/library/Aa293241(VS.60).aspx)
Criando um Assistente
http://msdn2.microsoft.com/en-us/library/96xz4cw2(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/96xz4cw2(vs.71).aspx)
Manipulando erros nos assistentes
http://msdn2.microsoft.com/en-us/library/ecbx59y8(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/ecbx59y8(vs.71).aspx)
O Visual C++ Project modelo
http://msdn2.microsoft.com/en-us/library/2eydyk57(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/2eydyk57(vs.71).aspx)
Migrando assistentes personalizados do Visual C++ .NET 2002 para o Visual C++ .NET 2003
http://msdn2.microsoft.com/en-us/library/8278bkdc(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/8278bkdc(vs.71).aspx)



A informação contida neste artigo aplica-se a:
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Academic Edition
Palavras-chave: 
kbmt kbhowtomaster kbwizard kbideproject kbide kbcustomwizard kbappwizard kbmigrate kbenv kbcodegen kbhowto KB810455 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 810455  (http://support.microsoft.com/kb/810455/en-us/ )