ID do artigo: 828736 - Última revisão: quinta-feira, 19 de abril de 2007 - Revisão: 2.6

Como chamar uma DLL gerenciada do código de Visual C++ nativo no Visual Studio.NET ou no Visual Studio 2005

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 passo a passo descreve como chamar uma DLL gerenciada do código C++ nativo. Para fazer isso, criar uma DLL gerenciada simples usando o Microsoft Visual translation from VPE for Csharp .NET ou Microsoft Visual translation from VPE for Csharp 2005 e chame essa DLL gerenciada do código C++ nativo.

Requisitos

Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Escrever os clientes COM (Component Object Model)
  • Interoperabilidade de COM no Microsoft .NET Framework

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
  • Translation from VPE for Csharp Visual .NET ou Visual translation from VPE for Csharp 2005
  • Visual C++ .NET ou Visual C++ 2005

Escrever uma DLL gerenciada

Para criar uma DLL gerenciada simples que tem um método público para adicionar dois números e retornar o resultado, execute essas etapas:
  1. Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project . A caixa de diálogo New Project é aberta.
  3. Em Project Types , clique em projetos translation from VPE for Csharp Visual .

    Observação No Visual Studio 2005, clique em translation from VPE for Csharp Visual em Tipos de projeto .
  4. Em modelos , clique em Class Library .
  5. Na caixa de texto nome , digite sManagedDLL e, em seguida, clique em OK .
  6. Abra o arquivo Class1.cs no modo de exibição código.
  7. Para declarar uma interface pública que possui um método para adicionar dois números, adicione o seguinte código para o file:
    // Interface declaration.
    public interface ICalculator
    {
        int Add(int Number1, int Number2);
    };
  8. Para implementar essa interface pública em uma classe, adicione o código seguinte à implementação de interface de file:
    // Interface implementation.
    public class ManagedClass:ICalculator
    {
        public int Add(int Number1,int Number2)
            {
                return Number1+Number2;
            }
    }
  9. Clique em Iniciar e, em seguida, aponte para programas .
  10. Se você estiver usando o Microsoft Visual Studio .NET 2003, aponte para Microsoft Visual Studio .NET 2003 e, em seguida, aponte para Visual Studio .NET Tools . Se você estiver usando o Microsoft Visual Studio .NET 2002, aponte para Microsoft Visual Studio .NET e, em seguida, aponte para Visual Studio .NET Tools . Se você estiver usando o Visual Studio 2005, aponte para Microsoft Visual Studio 2005 e, em seguida, aponte para Visual Studio 2005 Tools .
  11. Se você estiver usando o Visual Studio .NET 2003, clique em Prompt de comando do Visual Studio .NET 2003 para abrir um prompt de comando do Visual Studio .NET. Se você estiver usando o Visual Studio .NET 2002, clique em Visual Studio .NET Command Prompt para abrir um Visual Studio.NET prompt de comando. Se você estiver usando o Visual Studio 2005, clique em prompt de comando do Visual Studio 2005 para abrir um prompt de comando do Visual Studio 2005.
  12. Para criar um nome de alta segurança para sua biblioteca de classe, digite o seguinte comando no prompt de comando Visual Studio .NET:
    sn.exe -k MyKeyFile.SNK
  13. Copie o arquivo MyKeyFile.SNK para a pasta de projeto.
  14. Clique duas vezes o arquivo AssemblyInfo.cs para abrir o arquivo no Solution Explorer.
  15. Substituir as seguintes linhas de código na AssemblyInfo.cs arquivo
    [assembly: ComVisible(false)]
    [assembly: AssemblyDelaySign(false)]
    [assembly: AssemblyKeyFile("")]
    com o seguinte.
    [assembly: ComVisible(true)] 
    [assembly: AssemblyDelaySign(false)] 
    [assembly: AssemblyKeyFile("..\\..\\MyKeyFile.SNK")]
  16. Pressione CTRL + SHIFT + B para gerar a DLL gerenciada.

Registrar a DLL gerenciada para uso com ou com C++ nativo

Para usar a DLL gerenciada com ou com C++ nativo, você deve registrar as informações de assembly de sua DLL no registro do Windows. Para fazer isso, execute as seguintes etapas:
  1. Clique em Iniciar e, em seguida, aponte para programas .
  2. Se você estiver usando o Microsoft Visual Studio .NET 2003, aponte para Microsoft Visual Studio .NET 2003 e, em seguida, aponte para Visual Studio .NET Tools . Se você estiver usando o Microsoft Visual Studio .NET 2002, aponte para Microsoft Visual Studio .NET e, em seguida, aponte para Visual Studio .NET Tools . Se você estiver usando o Visual Studio 2005, aponte para Microsoft Visual Studio 2005 e, em seguida, aponte para Visual Studio 2005 Tools
  3. Se você estiver usando o Visual Studio .NET 2003, clique em Prompt de comando do Visual Studio .NET 2003 para abrir um prompt de comando do Visual Studio .NET. Se você estiver usando o Visual Studio .NET 2002, clique em Visual Studio .NET Command Prompt para abrir um Visual Studio.NET prompt de comando. Se você estiver usando o Visual Studio 2005, clique em prompt de comando do Visual Studio 2005 para abrir um prompt de comando do Visual Studio 2005.
  4. No prompt de comando Visual Studio .NET ou Visual Studio 2005, altere o caminho diretório da pasta que contém o DLL gerenciada.
  5. Para registrar as informações de assembly de sua DLL gerenciada no registro do Windows e para criar uma biblioteca de tipos correspondente, execute o seguinte comando no prompt de comando Visual Studio .NET:
    RegAsm.exe ManagedDLL.dll /tlb:ManagedDLL.tlb /codebase

Chamar a DLL gerenciada do código C++ nativo

Para chamar a DLL gerenciada que você criou do C++ nativo código, execute essas etapas:
  1. Inicie o Visual Studio .NET ou Visual Studio 2005.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  3. Se você estiver usando o Visual C++ .NET 2003, clique em Projetos do Visual c++ em Project Types e clique em Projeto de console do Win32 em modelos . Se você estiver usando o Visual C++ .NET 2002, clique em Projetos do Visual c++ em Project Types e clique em Projeto Win32 em modelos . Se você estiver usando o Visual C++ 2005, clique em Visual C++ em Tipos de projeto e clique em Projeto Win32 em modelos
  4. Na caixa de texto nome , digite CPPClient e, em seguida, clique em OK .
  5. Se você estiver usando o Visual C++ .NET 2003 ou Visual C++ 2005, clique em Concluir . Se você estiver usando o Visual C++ .NET 2002, clique em Configurações do aplicativo , clique em Aplicativo de console e em seguida, clique em Concluir .
  6. Abra o arquivo CPPClient.cpp no modo de exibição código.
  7. Para importar a biblioteca de tipos RegAsm.exe gera, adicione o código a seguir para o file:
    // Import the type library.
    #import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
    alterar o caminho da biblioteca de tipos se o caminho no seu computador for diferente desse caminho.
  8. Para declarar o namespace para usar, adicione o código a seguir ao arquivo CPPClient.cpp:
    using namespace ManagedDLL;
  9. Para chamar a DLL gerenciada, adicione o seguinte código para a função _tmain :
    // Initialize COM.
    HRESULT hr = CoInitialize(NULL);
    
    // Create the interface pointer.
    ICalculatorPtr pICalc(__uuidof(ManagedClass));
    
    long lResult = 0;
    
    // Call the Add method.
    pICalc->Add(5, 10, &lResult);
    
    wprintf(L"The result is %d", lResult);
    
    // Uninitialize COM.
    CoUninitialize();
    return 0;
  10. Pressione CTRL+F5 para executar o aplicativo.

Concluir código listagem

gerenciado DLL
// Class1.cs
// A simple managed DLL that contains a method to add two numbers.
using System;

namespace ManagedDLL
{
	// Interface declaration.
    public interface ICalculator
    {
        int Add(int Number1, int Number2);
    };

    // Interface implementation.
	public class ManagedClass:ICalculator
	{
       public int Add(int Number1,int Number2)
            {
                return Number1+Number2;
            }
	}
}
Cliente C++
// CPPClient.cpp: Defines the entry point for the console application.
// C++ client that calls a managed DLL.

#include "stdafx.h"
#include "tchar.h"
// Import the type library.

#import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
using namespace ManagedDLL;
int _tmain(int argc, _TCHAR* argv[])
{
    // Initialize COM.
    HRESULT hr = CoInitialize(NULL);

    // Create the interface pointer.
    ICalculatorPtr pICalc(__uuidof(ManagedClass));

    long lResult = 0;

    // Call the Add method.
    pICalc->Add(5, 10, &lResult);

    wprintf(L"The result is %d\n", lResult);


    // Uninitialize COM.
    CoUninitialize();
    return 0;
}
Observação você deve adicionar o common language runtime oferecem suporte a compilador opção ( / CLR: oldSyntax ) no Visual C++ 2005 a compilar com êxito este exemplo de código. Para fazer isso, execute as seguintes etapas:
  1. Clique em projeto e, em seguida, clique em propriedades ProjectName .

    Observação ProjectName representa o nome do projeto.
  2. Expanda Configuration Properties e, em seguida, clique em Geral .
  3. Clique para selecionar Common Language Runtime suporte, sintaxe antiga (/ CLR: oldSyntax) no projeto oferece suporte a Common Language Runtime definindo no painel à direita, clique em Aplicar e em seguida, clique em OK .
Para obter mais informações sobre o common language runtime oferece suporte às opções de compilador, visite o seguinte site:
/CLR (common Language Runtime Compilation)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx (http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx)

Referências

Para obter mais informações sobre expor classes componentes COM, visite a seguinte site da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/zsfww439(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/zsfww439(vs.71).aspx)

A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C++ 6.0 Service Pack 5
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
Palavras-chave: 
kbmt kbmanaged kbcominterop kbhowtomaster KB828736 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: 828736  (http://support.microsoft.com/kb/828736/en-us/ )