Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB.NET: Criação de Classes COM Interop (VB6)

Os programadores que utilizam VB6 e .Net certamente já disseram, quando estavam a programar em VB6, “Se isto fosse em .NET … era muito mais fácil!”. A verdade é que o .Net simplificou muitos processos, graças à plataforma .Net Framework e às suas classes.

Então se temos o .NET Framework instalado porque não a utilizamos?

É bastante simples de o fazer construindo classes COM Interop. Deste modo podemos utilizar no VB6 as potencialidades do .Net Framework, como por exemplo, enviar emails, encriptação, gestão de ficheiros, XML, compactação de ficheiros, etc, etc.            

Para mostrar como utilizar as classes COM Interop no VB6 irá ser mostrado um pequeno exemplo utilizando o Namespace IO do VB.Net. Este exemplo irá apagar todos os ficheiros num directório indicado, com uma determinada máscara. No VB6 este processo é muito mais complicado sendo necessário percorrer todos os directórios e verificar quais os ficheiros que cumprem os requisitos para serem eliminados.

Para construir o nossa classe COM Interop fazer então o seguinte:

VB.NET

1 – Criar um novo projecto e seleccionar Class Library e alterar o nome para myComProject


2 – Eliminar a classe automaticamente criada “Class1.vb”


3 – Adicionar um novo item do tipo COM Class e alterar o nome para myComClass


Após isto o Visual Studio faz algumas configurações no nosso projecto e cria algum código na classe.

4 – Adicionar o Sub DeleteFiles (apenas adicionar este novo Sub e manter o restante). No final ficará com este aspecto:

<ComClass(myComClass.ClassId, myComClass.InterfaceId, myComClass.EventsId)> _
Public Class myComClass

#Region "COM GUIDs"
    ' These  GUIDs provide the COM identity for this class 
    ' and its COM interfaces. If you change them, existing 
    ' clients will no longer be able to access the class.
    Public Const ClassId As String = "0c6277bf-5e39-4682-8027-18b62c82ee6f"
    Public Const InterfaceId As String = "154cdcef-f13f-4af2-82c8-fc6de1e74a7d"
    Public Const EventsId As String = "07420108-f1c9-4b36-adbc-1373035429f7"
#End Region

    ' A creatable COM class must have a Public Sub New() 
    ' with no parameters, otherwise, the class will not be 
    ' registered in the COM registry and cannot be created 
    ' via CreateObject.
    Public Sub New()
        MyBase.New()
    End Sub

    ''' <summary>
    ''' Apaga todos os ficheiros numa determinada localização
    ''' </summary>
    ''' <param name="filePath">Directório a procurar</param>
    ''' <param name="filePattern">Máscara a eliminar</param>
    ''' <remarks></remarks>
    Public Sub DeleteFiles(ByVal filePath As String, ByVal filePattern As String)

        Try

            ' Verifica se o directório existe
            If Not IO.Directory.Exists(filePath) Then
                Throw New ArgumentException("A caminho indicado não é válido")
                Exit Sub
            End If

            ' Elimina os ficheiros de acordo com a máscara seleccionada
            Dim files() As String = IO.Directory.GetFiles(filePath, filePattern)
            For Each myfile As String In files
                IO.File.Delete(myfile)
            Next

        Catch ex As Exception
            Throw New ArgumentException(ex.Message)
        End Try

    End Sub

End Class


5 – Gravar e compilar o Projecto. Irá então ser criado um novo DLL.

VB6

6 – Abrir o VB6 e criar um novo projecto "Standard EXE"

7 – Ir ao menu Project – References e adicionar o *.tlb, que se encontra na pasta Bin\Release\, da nossa classe COM criada. Atenção: o ficheiro myComProject.tlb e não o myComProject.dll

8 – Adicionar um botão o Form e no evento click colocar o seguinte código:

    Private Sub Command1_Click()           

        ' Cria uma nova instância da nossa classe
        Dim cls As New myComClass           

        ' Apaga todos os ficheiros no directório d:\test que tenham a extensão txt
        cls.DeleteFiles "d:\test", "*.txt"

    End Sub

Como podem ver após este exemplo, é utilizar as potencialidades da plataforma .NET no Visual Basic 6. Esta funcionalidade permite, além de simplificar muito código, utilizar funções que só se conseguiam através do VB.NET.

3 comentários:

Katia disse...

Oi boa Noite.
Segui o seu exemplo e quando tento enviar mais de 20 parametros retorna o erro abaixo:

Function or interface marked as restricted, or the function uses an Automation type not supported im Visual Basic

Jorge Paulino disse...

Olá Katia,

Podes mostrar algum código e mais detalhes? Isso é um pouco vago!

Unknown disse...

Criei a DLL no VB.Net, ocorre que seguir todos os seus passos. Adicionei o tlb de referência, instâcio a classe normalmente mas quando vou usar no exemplo do IF ocorre a mensagem: Activex component can't creat object

Dim XSignSelo As New XSignPKCSCertificate.XSignCertificate
If XSignSelo.DescriptografarXML(CaminhoXML, ArquivoSelo) = True Then

end if



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject
Google-Translate-ChineseGoogle-Translate-Portuguese to FrenchGoogle-Translate-Portuguese to GermanGoogle-Translate-Portuguese to ItalianGoogle-Translate-Portuguese to JapaneseGoogle-Translate-Portuguese to EnglishGoogle-Translate-Portuguese to RussianGoogle-Translate-Portuguese to Spanish

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico