Artigo: 810455 - Última revisão: terça-feira, 13 de Novembro de 2007 - Revisão: 2.8

Como migrar um AppWizard personalizado Visual C++ 6.0 para um assistente personalizado 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 | Reduzir tudo

Sumário

Este artigo descreve como criar um personalizado AppWizard 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 assistente personalizado no Visual C++ .NET é significativamente diferente da tecnologia AppWizard personalizada no Visual C++ 6.0. Não é possível a porta um projecto AppWizard personalizado que foi criado no Visual C++ 6.0 directamente para a nova tecnologia. No entanto, pode reutilizar os ficheiros de modelo existentes e modificar as directivas existentes para a nova sintaxe.

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita:
  • Sistema operativo Microsoft Windows 2000 ou posterior
  • Microsoft Visual Studio 6.0
  • Microsoft Visual Studio .NET
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
  • Microsoft Visual Studio 6.0
  • Microsoft Visual Studio .NET
  • Microsoft Visual C++ .NET

Visual C++ 6.0 AppWizard personalizado

Criar um AppWizard personalizado Visual C++ 6.0

  1. Inicie o Visual C++ 6.0.
  2. No menu ficheiro , clique em Novo .

    A caixa de diálogo Novo aparece.
  3. Na caixa de diálogo Novo , clique no separador projectos .
  4. No separador projectos , clique em Personalizar AppWizard .
  5. Na caixa nome do projecto , escreva MyVC6Custom e, em seguida, clique em OK .

    A caixa de diálogo Personalizar AppWizard - passo 1 de 2 é apresentada.
  6. Faça clique sobre os passos personalizados .
  7. No como muitos passos personalizados deseja? caixa, defina o número de passos personalizados para 0, clique em Concluir e, em seguida, clique em OK .
É criado um projecto AppWizard personalizado denominado "MyVC6Custom".


Criar ficheiros de projecto personalizado

  1. Inicie o bloco de notas ou uma aplicação do editor de texto.
  2. No bloco de notas ou no editor de texto, 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. Guarde o ficheiro como SAfx.h na seguinte pasta:

    Path_to_VC6_Custom _AppWizard\MyVC6Custom\Template

    Nota Path_to_VC6_Custom _AppWizard é um marcador para o caminho onde criou o projecto MyVC6Custom.
  4. No bloco de notas ou no editor de texto, cole o seguinte código:
    #include "stdafx.h"
  5. Guarde o ficheiro como SAfx.cpp na seguinte pasta:
    Path_to_VC6_Custom _AppWizard\MyVC6Custom\Template
  6. No bloco de notas ou no editor de texto, 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. Guarde o ficheiro como Root.cpp na seguinte pasta:
    Path_to_VC6_Custom _AppWizard\MyVC6Custom\Template

Personalizar o projecto

  1. Localize o código seguinte no ficheiro do projecto MyVC6Custom MyVC6Customaw.cpp:
    void CMyVC6CustomAppWiz::CustomizeProject(IBuildProject* pProject)
    {
  2. Adicione o seguinte código após o código que localizou no passo 1: pConfigs
    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 ficheiro StdAfx.h do projecto MyVC6Custom:
    #include <atlbase.h>
    #include <ObjModel\bldguid.h> 
    #include <ObjModel\bldauto.h>

Copie os ficheiros de modelo para os directórios modelo

  1. Na janela Área de trabalho, clique no separador FileView , clique com o botão direito do rato Ficheiros de modelo e, em seguida, clique em Adicionar ficheiros à pasta .

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

    Aplicação de consola Win32 simples.
    Imprime "Hello, World!" para a consola.
  5. Na pasta Ficheiros de modelo , clique com o botão direito do rato Newproj.inf , clique em Abrir e, em seguida, substitua o código existente no ficheiro Newproj.inf com o seguinte código:
    $$// 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
    
    Nota tem de separar o ficheiro de nomes utilizando a tecla TAB. Não utilize a barra de espaços.
  6. No espaço de trabalho, clique no separador ResourceView , expanda MyVC6Custom recursos , clique com o botão direito do rato no modelo e, em seguida, clique em Inserir .

    A caixa de diálogo Inserir recursos é apresentada.
  7. Na caixa de diálogo Inserir recursos , clique em Importar .

    A caixa de diálogo Importar recursos é apresentada.
  8. Na caixa ficheiros do tipo , clique em todos os ficheiros (*. *) 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 aparece.
  10. Na caixa de diálogo Tipo de recurso personalizado , clique em modelo e, em seguida, clique em OK .

    O modelo IDR_TEMPLATE1 será adicionado à pasta de modelo.
  11. Clique com o botão direito do rato IDR_TEMPLATE1 , clique em Propriedades , escreva "ROOT.CPP" na caixa ID e, em seguida, prima ENTER.
  12. Repita o passo 11 para adicionar o ficheiro SAfx.h e o ficheiro SAfx.cpp a pasta de modelo e mudar o nome as respectivas propriedades ID "SAFX.H" e "SAFX.CPP", respectivamente.
  13. No menu ficheiro , clique em Guardar tudo .
  14. No menu criar , clique em Reconstruir tudo .
O AppWizard personalizado MyVC6Custom AppWizard é criado. O modelo MyVC6Custom AppWizard é adicionado ao separador projectos do Visual C++.


Visual C++ .NET assistente personalizado

Criar um assistente personalizado Visual C++ .NET

  1. Inicie o Visual Studio NET..
  2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto .

    A caixa de diálogo Novo projecto é apresentada.
  3. Em Project Types , clique em Projectos do Visual C++ .
  4. Em modelos , clique em Assistente de personalizada .
  5. Na caixa nome , escreva MyVC7Custom e, em seguida, clique em OK .

    A caixa de diálogo Custom Wizard - MyVC7Custom aparece.
  6. Na caixa de diálogo Personalizada assistente - MyVC7Custom , clique em Definições da aplicação , clique para desmarcar a caixa de verificação de interface de utilizador e, em seguida, clique em Concluir .

Copie os ficheiros de modelo para os directórios modelo

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

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

    Nota Path_to_VC7_Custom _Wizard é um marcador para o caminho onde criou o assistente MyVC7Custom.
  5. Mude o nome do ficheiro de SAfx.cpp para StdAfx.cpp e mude o nome do ficheiro SAfx.h para StdAfx.h.
  6. Clique com o botão direito do rato Ficheiros de modelo , aponte para Adicionar e clique em Item existente .
  7. A caixa de diálogo Add Existing Item - MyVC7Custom aparece.
  8. Na caixa de diálogo Add Existing Item - MyVC7Custom , localize a seguinte pasta:

    Path_to_VC7_Custom _Wizard\MyVC7Custom\Templates\1041

    Nota Path_to_VC7_Custom _Wizard é um marcador para o caminho onde criou o assistente MyVC7Custom.
  9. Adicione o ficheiro Root.cpp, o ficheiro StdAfx.cpp e o ficheiro StdAfx.h para a pasta Modelos.

Personalizar o projecto

  1. No Solution Explorer, clique com o botão direito do rato Templates.inf e, em seguida, clique em Abrir .
  2. Substitua o código existente com o seguinte código:
    root.cpp
    StdAfx.cpp
    StdAfx.h
  3. No Solution Explorer, clique com o botão direito do rato default.js e, em seguida, clique em Abrir .
  4. Localize o código seguinte no ficheiro Default.js:
    function AddFilters(proj)
    {
  5. Substitua o código existente na função AddFilters que localizou no passo 4 com o seguinte código: tente
    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 projecto.
  6. Localize o código seguinte no ficheiro Default.js:
    function AddConfig(proj, strProjectName)
    {
  7. Substitua o código existente na função AddConfig que localizou no passo 6 com o seguinte código:
    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 projecto. Pode fornecer definições compilador e linker.
  8. Localize o código seguinte no ficheiro Default.js:
    function GetTargetName(strName, strProjectName)
    {
  9. Substitua o código existente na função GetTargetName que localizou no passo 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 ficheiro especificado.
  10. No Solution Explorer, clique com o botão direito do rato MyVC7Custom.vsz e, em seguida, clique em Abrir .
  11. Localize o código seguinte no ficheiro MyVC7Custom.vsz :
    Param="SOURCE_FILTER = txt"
  12. Substitua o código que localizou no passo 11 com o seguinte código:
    Param="SOURCE_FILTER = cpp"
    Param="HEADER_FILTER = h"
    Param="RESOURCE_FILTER = txt"
  13. No menu ficheiro , clique em Guardar tudo .
  14. Localize a seguinte pasta:
    Path_to_VC7_Custom _Wizard\MyVC7Custom
  15. Copie o ficheiro MyVC7Custom.ico, o ficheiro MyVC7Custom.vsz e o ficheiro MyVC7Custom.vsdir para a seguinte localização:
    Hard disk drivePasta \Microsoft 2003\Vc7\vcprojects visual Studio. NET.
    Hard disk driveé um marcador para a unidade em que o Visual Studio .NET 2003 está instalado.

    Nota Se tiver criado o assistente personalizado no Microsoft Visual Studio .NET 2002, copie o ficheiro MyVC7Custom.ico, o ficheiro MyVC7Custom.vsz e o ficheiro MyVC7Custom.vsdir para a seguinte localização:
    Hard disk drive\Microsoft visual Studio .NET\Vc7\vcprojects pasta.
    Hard disk driveé um marcador para a unidade em que o Visual Studio .NET 2002 está instalado.
O modelo de assistente personalizado MyVC7Custom é criado. Pode utilizar o modelo para criar uma simples consola aplicação de Win32.

Mais Informação

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

VSDir o ficheiro
Um ficheiro VSDir é um ficheiro de texto com uma extensão de nome de ficheiro .vsdir. O ficheiro fornece informações para a caixa de diálogo Adicionar Item e a caixa de diálogo Novo projecto sobre como apresentar os itens que contém o ficheiro. Estes itens incluem os respectivos nomes, ordem em que aparecem e o ícone que é apresentado com os mesmos. Um único ficheiro VSDir contém registos para vários assistentes, pastas e modelos. Cada registo no ficheiro de é separado por um carácter de nova linha. Caracteres de barra vertical (|) separar os campos em cada registo.

ficheiro do JScript
Cada assistente personalizado cria um ficheiro JScript que chama Default.js para cada projecto. Este ficheiro contém funções que pode utilizar para personalizar o projecto. Também pode adicionar as suas próprias funções para o ficheiro Default.js para o projecto.

Templates.inf o ficheiro
O ficheiro Templates.inf é um ficheiro de texto que contém uma lista de modelos para o projecto. Pode utilizar as directivas de modelo no ficheiro Templates.inf para personalizar o projecto. Tenha em atenção as seguintes informações quando utilizar as directivas de modelo:
  • Não é possível aninhar uma [! se] directiva num [! ciclo] directiva.
  • Pode aninhar um [! ciclo] directiva noutro [! ciclo] directiva ou [! se] / [! pessoa] directivas.
  • Não existe nenhum [! elif] directiva. Não é possível aninhar [! se] directivas [! se] / [! pessoa] directivas. Por isso, para $ $ ELIF , directivas tem duplicado a lógica. Por exemplo, o código seguinte é um exemplo de um ciclo IF ELSE que é criado utilizando as directivas de modelo do Visual C++ 6.0:
    $$IF (macro1)
    // Some code 1
    $$ELIF (macro2)
    // Some code 2
    $$ENDIF

    Este código pode ser convertido o código seguinte acordo com a directivas de modelo de Visual C++. NET:
    [!if macro1]
    // Some code 1
    [!endif]
    [!if !macro1 and macro2]
    // Some code 2
    [!endif]
  • Pode especificar comentários utilizando o exemplo seguinte:
    [!if 0]
    This is a comment.
    [!endif]


Referências

Para mais informações, visite os seguintes Web sites da Microsoft Developer Network (MSDN):
Criar AppWizards personalizada
http://msdn2.microsoft.com/en-us/library/Aa293241(VS.60).aspx (http://msdn2.microsoft.com/en-us/library/Aa293241(VS.60).aspx)
Estruturar um assistente
http://msdn2.microsoft.com/en-us/library/96xz4cw2(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/96xz4cw2(vs.71).aspx)
Processamento de 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)
Visual C++ projecto modelo
http://msdn2.microsoft.com/en-us/library/2eydyk57(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/2eydyk57(vs.71).aspx)
Migrar assistentes personalizada a partir do Visual C++ .NET 2002 ao 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )