Utilização de DLL's VB.NET

4 respostas
J

Galera, estou começando a desenvolver na plataforma VB.NET e quero gerar uma Dll para utilizá-la em um aplicativo Java.

A Dll que quero gerar é referente a uma biblioteca de classes modelo, que descrevem objetos.

Segue o código das classes dessa biblioteca:

Classe Produto

Public Class Produto

    Private nome As String
    Private descricao As String
    Private cod_produto As Integer
    Private preco As Double

    Public Sub New()
        Me.nome = ""
        Me.descricao = ""
        Me.cod_produto = 0
        Me.preco = 0.0
    End Sub

    Public Sub New(ByVal nome As String, ByVal descricao As String, ByVal cod_produto As Integer, ByVal preco As Double)
        Me.nome = nome
        Me.descricao = descricao
        Me.cod_produto = cod_produto
        Me.preco = preco
    End Sub

    Property Name() As String
        Get
            Return Me.nome
        End Get
        Set(ByVal name As String)
            Me.nome = name
        End Set
    End Property

    Property Description() As String
        Get
            Return Me.descricao
        End Get
        Set(ByVal description As String)
            Me.descricao = description
        End Set
    End Property

    Property Code() As Integer
        Get
            Return Me.cod_produto
        End Get
        Set(ByVal code As Integer)
            Me.cod_produto = code
        End Set
    End Property

    Property Price() As Double
        Get
            Return Me.preco
        End Get
        Set(ByVal preco As Double)
            Me.preco = preco
        End Set
    End Property


    Public Overrides Function Equals(ByVal obj As Object) As Boolean

        Try
            If obj Is Nothing Or Not Me.GetType() Is obj.GetType() Then
                Return False
            End If

            Dim p As Produto = CType(obj, Produto)

            If p.Code.Equals(Me.cod_produto) And p.Name.Equals(Me.nome) And p.Price.Equals(Me.preco) And p.Description.Equals(Me.descricao) Then
                Return True
            End If
        Catch ex As InvalidCastException
            Return False
        End Try

        Return False

    End Function

End Class

Classe Usuario

Public Class Usuario

    Private login As String
    Private senha As String
    Private cod_usuario As Integer
    Private qtde_acessos As Integer

    Public Sub New()
        Me.login = ""
        Me.senha = ""
        Me.cod_usuario = 0
        Me.qtde_acessos = 0
    End Sub

    Public Sub New(ByVal login As String, ByVal senha As String, ByVal cod_usuario As Integer, ByVal qtde_acessos As Integer)
        Me.login = login
        Me.senha = senha
        Me.cod_usuario = cod_usuario
        Me.qtde_acessos = qtde_acessos
    End Sub

    Property Log() As String
        Get
            Return Me.login
        End Get
        Set(ByVal login As String)
            Me.login = login
        End Set
    End Property

    Property Password() As String
        Get
            Return Me.senha
        End Get
        Set(ByVal senha As String)
            Me.senha = senha
        End Set
    End Property

    Property Code() As Integer
        Get
            Return Me.cod_usuario
        End Get
        Set(ByVal cod_usuario As Integer)
            Me.cod_usuario = cod_usuario
        End Set
    End Property

    Property Acessos() As Double
        Get
            Return Me.qtde_acessos
        End Get
        Set(ByVal acessos As Double)
            Me.qtde_acessos = acessos
        End Set
    End Property

    Public Overrides Function Equals(ByVal obj As Object) As Boolean
        Try
            If obj Is Nothing Or Not Me.GetType() Is obj.GetType() Then
                Return False
            End If

            Dim user As Usuario = CType(obj, Usuario)

            If user.Code.Equals(Me.cod_usuario) And user.Log.Equals(Me.login) And user.Password.Equals(Me.qtde_acessos) Then
                Return True
            End If
        Catch ex As InvalidCastException
            Return False
        End Try

        Return False

    End Function
End Class

Pesquisei exaustivamente no Google e achei muita coisa, mas não entendi a maioria. Muitos dizem a respeito de registrar a Dll, mas eu não faço idéia do que seja isso. Segui um passo a passo que encontrei e até consegui registrar a dll, mas no final das contas, ainda assim não deu certo. :(

Por isso, vim aqui no GUJ procurar alguém com experiência e boa vontade de ajudar, o q sei q não falta por aqui =)

Tentei usar o Jawin, mas esse não oferece suporte a sistemas 64 bit, q é o meu caso, então tentei substituí-lo pelo JACOB, mas não estou obtendo sucesso.

Copiei a dll jacob-1.17-M2-x64 para o System32 e tudo o q aconteceu foi uma mudança no erro do Java, q passou a ser:

Exception in thread "main" com.jacob.com.ComFailException: Can't get object clsid from progid

Será q alguém pode me ensinar passo a passo como utilizar uma Dll feita em VB no java?

Vlws galera! Aguardo ansiosamente por uma resposta

4 Respostas

Mikhas

Na verdade é bem dificil utilizar DLLs .NET com outras plataformas que não .NET.

A maneira menos complicada de se fazer isso é escrevendo uma camada em C que acesse essa DLL e voce chama a camada C usando JNI ou JNA.

De qualquer maneira, por que voce nao escreve essas classes em Java?

J

Não escrevo essas classes em Java porque a ideia é aprender a usar Dlls da plataforma .NET em Java.

Será q realmente não existe um jeito simples?

E

Uma vez tive de fazer exatamente o contrário (usar código Java em programa C#) e usei o tal do IKVM.NET.

Obviamente ele não resolve seu problema a menos que seu programa Java seja muito bem comportado e consiga ser convertido para .NET usando-se o IKVM.NET. Nesse caso é até possível você fazer isso que você quer.

http://www.ikvm.net/uses.html
http://sourceforge.net/apps/mediawiki/ikvm/index.php?title=Tutorial

J

Então quer dizer q sem conversões é impossível usar Dll’s VB em Java?

Criado 22 de julho de 2012
Ultima resposta 28 de jul. de 2012
Respostas 4
Participantes 3