Desenvolvedores.Net - TechBlog

Tag Archives: ActiveX

Usando dll C# como um ActiveX/DLL

4
1 Estrela2 Estrelas3 Estrelas4 Estrelas5 Estrelas (1 votos, média: 5,00 de 5)
Loading...
25 de fevereiro de 2011
Nem todas as linguagens suportam o acesso às classes, métodos e propriedades das DLL’s criadas em .NET de uma forma “automática”, “nativa”.
Muitas vezes temos a necessidade de disponibilizar estes acessos para linguagens que suportam o uso de ActiveX. (veja: http://pt.wikipedia.org/wiki/ActiveX)E isso é bem simples de se fazer em .NET. Vamos ver como.

Iremos criar um novo projeto do tipo Class Library no Visual Studio eu dei o nome de ActiveX (criativo não?).
Iremos criar uma classe chamada de “MinhaClasse” (minha criatividade para nomes está a mil hoje).
Primeiro vamos ver o código de MinhaClasse
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ActiveX
{
    //define o tipo de interface da classe

    [ClassInterface(ClassInterfaceType.AutoDual)]

    //registra um identificador para a classe no registry
    [ProgId("ActiveX.MinhaClasse")]

    //faz com que todos os métodos e propriedades da classe sejam visíveis
    [ComVisible(true)]

    public class MinhaClasse
    {
        private string mPropriedade;

        public string MinhaPropriedade
        {
            get { return mPropriedade; }
            set { mPropriedade = value; }
        }

        public string MeuMetodo()
        {
            return "MeuMetodo";
        }

        //este método eu não quero que seja visível. Então somente pra ele eu uso o comvisible = false
        [ComVisible(false)] //este método não ira aparecer no VB6 por ex.
        public string MeuMetodoOculto()
        {
            return "MeuMetodoOculto";
        }
    }
}
Ok! Feito isso podemos compilar nossa classe, que não irá dar erro, mas também não vai funcionar, temos que marcar um checkBox mágico para que a DLL como um todo seja declarada como ActiveX.
Para isso vá em “Project” -> “Properties” -> Aba “Build” e marque a opção “Register for COM Interop”.
Veja na animação:
Feito isso, compilaremos novamente a nossa DLL. Mas também não iria funcionar só de compilar. 🙂
Como todo bom ActiveX que se preze temos que registrar.
Utilize a seguinte sintaxe:
para registrar :
%windir%\Microsoft.NET\Framework\XXX\RegAsm.exe “Caminho Completo do ActiveX.dll” /tlb
Onde XXX é a versão do seu framework
Pronto, agora sim podemos usar a nossa DLL como um activeX, para isso vamos usar o VBScript para criarmos o objeto e um arquivo HTML com java script como exemplo.
VBScript
Dim activex
set activex = CreateObject("ActiveX.MinhaClasse")
MsgBox activex.MeuMetodo
Agora em HTML com java script

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>

    <script language="javascript" type="text/javascript">
    function Load()
    {
        var activeX;
        activeX = new ActiveXObject("ActiveX.MinhaClasse");
        alert (activeX.MeuMetodo());
    }
    </script>

    <title>Testando ActiveX em .NET</title>
</head>
<body onload="Load();">
</body>
</html>
Este artigo foi apenas uma parte do que se é possível fazer, mas não podemos esquecer dos eventos e interfaces que nossas dlls podem ter.
Mas isso vai ficar para uma próxima vez. 🙂
É isso ai pessoal 🙂
Até o próximo
♦ Marcelo

About Marcelo

Nascido em Juruaia/MG em uma fazenda de criação de búfalos, e residindo na região Sul do Brasil. Trabalha com desenvolvimento de aplicações desde os 17 anos. Atualmente é Arquiteto Organizacional na Unimake Software. Para saber mais ... http://desenvolvedores.net/marcelo []'s