Artigo: 828736 - Última revisão: quinta-feira, 19 de Abril de 2007 - Revisão: 2.6

Como chamar uma DLL gerida a partir de código nativo do Visual C++ 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 | Reduzir tudo

Sumário

Este artigo passo a passo descreve como chamar uma DLL gerida a partir de código C++ nativo. Para tal, crie uma DLL gerida simples utilizando o Microsoft Visual C# .NET ou Microsoft Visual C# 2005 e, em seguida, chamar esta DLL gerido a partir de código C++ nativo.

Requisitos

Este artigo pressupõe que está familiarizado com os seguintes tópicos:
  • Clientes COM (Component Object Model) de escrita
  • Interoperabilidade COM no Microsoft .NET Framework

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita:
  • O Visual C# .NET ou Visual C# 2005
  • Visual C++ .NET ou Visual C++ 2005

Escrever uma DLL de gestão

Para criar uma DLL gerida simples que tenha um método para adicionar dois números e devolver o resultado público, siga estes passos:
  1. Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto . É aberta a caixa de diálogo novo projecto .
  3. Em Project Types , clique em Visual C# Projects .

    Nota No Visual Studio 2005, clique em Visual C# em Project Types .
  4. Em modelos , clique em classe biblioteca .
  5. Na caixa de texto nome , escreva sManagedDLL e, em seguida, clique em OK .
  6. Abra o ficheiro Class1.cs na vista de código.
  7. Para declarar uma interface pública que tem 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 esta interface pública de uma classe, adicione o seguinte código para a implementação de Interface Class1.cs 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 estiver a utilizar o Microsoft Visual Studio .NET 2003, aponte para Microsoft Visual Studio .NET 2003 e, em seguida, aponte para o Visual Studio .NET Tools . Se estiver a utilizar o Microsoft Visual Studio .NET 2002, aponte para Microsoft Visual Studio .NET e, em seguida, aponte para o Visual Studio .NET Tools . Se estiver a utilizar o Visual Studio 2005, aponte para Microsoft Visual Studio 2005 e, em seguida, aponte para o Visual Studio 2005 Tools .
  11. Se estiver a utilizar o Visual Studio .NET 2003, clique em Visual Studio .NET 2003 comandos para abrir uma linha de comandos Visual Studio. NET. Se estiver a utilizar o Visual Studio .NET 2002, clique em linha de comandos do Visual Studio .NET para abrir o Visual Studio .NET linha de comandos. Se estiver a utilizar o Visual Studio 2005, clique em Visual Studio 2005 comandos linha de comandos para abrir uma linha de comandos Visual Studio 2005.
  12. Para criar um nome seguro para a biblioteca de classes, escreva o seguinte comando na linha de comandos Visual Studio. NET:
    sn.exe -k MyKeyFile.SNK
  13. Copie o ficheiro MyKeyFile.SNK para a pasta de projecto.
  14. Faça duplo clique no ficheiro AssemblyInfo.cs para abrir o ficheiro no Solution Explorer.
  15. Substituir as seguintes linhas de código a AssemblyInfo.cs ficheiro
    [assembly: ComVisible(false)]
    [assembly: AssemblyDelaySign(false)]
    [assembly: AssemblyKeyFile("")]
    com o seguinte.
    [assembly: ComVisible(true)] 
    [assembly: AssemblyDelaySign(false)] 
    [assembly: AssemblyKeyFile("..\\..\\MyKeyFile.SNK")]
  16. Prima CTRL + SHIFT + B para gerar a DLL gerida.

Registar o DLL gerido para utilizar com ou nativas C++

Para utilizar a DLL gerida com ou com C++ nativo, tem de registar as informações de assemblagem da DLL no registo do Windows. Para o fazer, siga estes passos:
  1. Clique em Iniciar e, em seguida, aponte para programas .
  2. Se estiver a utilizar o Microsoft Visual Studio .NET 2003, aponte para Microsoft Visual Studio .NET 2003 e, em seguida, aponte para o Visual Studio .NET Tools . Se estiver a utilizar o Microsoft Visual Studio .NET 2002, aponte para Microsoft Visual Studio .NET e, em seguida, aponte para o Visual Studio .NET Tools . Se estiver a utilizar o Visual Studio 2005, aponte para Microsoft Visual Studio 2005 e, em seguida, aponte para o Visual Studio 2005 Tools
  3. Se estiver a utilizar o Visual Studio .NET 2003, clique em Visual Studio .NET 2003 comandos para abrir uma linha de comandos Visual Studio. NET. Se estiver a utilizar o Visual Studio .NET 2002, clique em linha de comandos do Visual Studio .NET para abrir o Visual Studio .NET linha de comandos. Se estiver a utilizar o Visual Studio 2005, clique em Visual Studio 2005 comandos linha de comandos para abrir uma linha de comandos Visual Studio 2005.
  4. Na linha de comandos Visual Studio .NET ou Visual Studio 2005, altere o caminho directório do directório que contém a DLL gerido.
  5. Para registar as informações de assemblagem de DLL gerido no registo do Windows e para criar uma biblioteca de tipo correspondente, execute o seguinte comando na linha de comandos Visual Studio. NET:
    RegAsm.exe ManagedDLL.dll /tlb:ManagedDLL.tlb /CODEBASE

Chamar a DLL de gestão de código C++ nativo

Para chamar a DLL gerida que acabou de criar a partir de C++ nativo código, siga estes passos:
  1. Inicie o Visual Studio .NET ou Visual Studio 2005.
  2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto .
  3. Se estiver a utilizar o Visual C++ .NET 2003, clique em Projectos do Visual C++ em Project Types e, em seguida, clique em Win32 consola projecto em modelos . Se estiver a utilizar o Visual C++ .NET 2002, clique em Projectos do Visual C++ em Project Types e, em seguida, clique em Projecto Win32 em modelos . Se estiver a utilizar o Visual C++ 2005, clique em Visual C++ em Project Types e, em seguida, clique em Win32 projecto em modelos
  4. Na caixa de texto nome , escreva CPPClient e, em seguida, clique em OK .
  5. Se estiver a utilizar o Visual C++ .NET 2003 ou Visual C++ 2005, clique em Concluir . Se estiver a utilizar o Visual C++ .NET 2002, clique em Definições da aplicação , clique em Aplicação de consola e, em seguida, clique em Concluir .
  6. Abra o ficheiro CPPClient.cpp na vista de código.
  7. Para importar a biblioteca de tipos RegAsm.exe gera, adicione o código seguinte 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 computador difere este caminho.
  8. Para declarar o espaço de nomes para utilizar, adicione o seguinte código para o ficheiro CPPClient.cpp:
    using namespace ManagedDLL;
  9. Para chamar a DLL gerida, adicione o código seguinte 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. Prima CTRL + F5 para executar a aplicação.

Concluir código lista

gerido 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;
            }
	}
}
C++ cliente
// 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;
}
Nota tem de adicionar o common language runtime suportam a opção do compilador ( / clr:oldSyntax ) no Visual C++ 2005 a compilação com êxito este exemplo de código. Para o fazer, siga estes passos:
  1. Clique em projecto e, em seguida, clique em propriedades ProjectName .

    Nota ProjectName representa o nome do projecto.
  2. Expanda Propriedades de configuração e, em seguida, clique em Geral .
  3. Clique para seleccionar Runtime do idioma comum suporte, sintaxe antigo (/ clr:oldSyntax) na definição de projecto Common Language Runtime suporte no painel da direita, clique em Aplicar e, em seguida, clique em OK .
Para obter mais informações sobre o common language runtime suporta opções de compilador, visite o seguinte Web site da Microsoft:
/CLR (compilação de Runtime do idioma comum)
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 o .NET Framework componentes COM, visite o seguinte Web 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 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: 828736  (http://support.microsoft.com/kb/828736/en-us/ )