Acesso a DLL feita em .NET com JNI

9 respostas
G

Ola pessoal boa tarde.
Tenho que implementar algumas chamadas a uma DLL de um terceiro. As unicas informações que tenho sobre as DLLs são os cabeçalhos das chamadas e que foram feitas em .NET

Minhas perguntas:
1- Não consigo acessar a DLL via JNI pelo fato de ter sido feita em .NET ( ou seja, é um comonente COM )?
2- Então caso não consiga via jni, preciso criar uma outra DLL ( em C++ ) que serviria de ponte para esta dll do terceiro?

Só para constar, eu consigo acessar uma DLL feita por mim em C++, mas esta DLL do terceiro realmente não funciona. Clássico erro UnsatisfiedLinkError.

Obrigado.

9 Respostas

T

Se a DLL for 100% .NET, para acessá-la do Java é necessário carregar a CLR (Common Language Runtime). Provavelmente você terá de comprar um produto de terceiros, como o JNBridge ( http://www.jnbridge.com/index.htm ).

P

Cara,
Eu tive que acessar uma DLL de Delphi (também é um dispositivo COM) uma vez e utilizei esse projeto
http://www.danadler.com/jacob/
ele é free é funciona muito bem…

G

Então, ai está outro empecilho, nao posso usar nenhum produto de terceiros…
Não sei dizer se a DLL é 100% .NET, para falar a verdade, não sei o que seria uma DLL que nao fosse 100% .NET, no entanto.
Como ela seria um componente COM, tentei registrar mas o windows disse que não pode ser registrado, então nao sei se seria um COM puro… bom, sinceramente nao sei…

G

Hum, se eu criar uma DLL em C++, para acessar esta outra DLL, seria o mais adequado?

T

Existem 3 tipos de DLLs:
a) A DLL mais antiga é aquela que é fácil de chamar a partir do Java (JNI), do C++ e do Delphi (e no VB 6.0 via “Declare Function”). Essas DLLs normalmente são escritas em C++ ou Delphi, e não precisam ser registradas. Você pode usar o JNI para acessá-las.
b) As DLLs “ActiveX” ou “COM” são aquelas que se registram (com regsvr32) e são normalmente escritas em VB 6.0 . Elas podem ser chamadas com o pacote Jacob.
c) As DLLs “.NET” requerem o .NET Framework e só rodam normalmente a partir de executáveis escritos em .NET, ou seja, C# ou VB.NET. Elas normalmente são escritas em C# ou VB. NET. Para você chamar uma DLL dessas a partir de um programa Java:

  • Você compra um programa de terceiros
  • Você chora
  • Você cria um programa .NET que carrega essa DLL e fala com seu programa Java via sockets.
T

Se você for “pro” suficiente, pode tentar criar uma DLL JNI em Managed C++ (acho que é isso que é feito pelo JNBridge), para chamar a DLL .NET. Eu nunca tentei isso; não achei muitas referências quanto a isso na Internet.

G

Voce diz acessar a dll pelo C++ ( GCC ) via outra DLL?
Eu tentei buscar informações a respeito, mas também não encontrei nada.

T

Se a DLL for realmente .NET (ou seja, requer um programa .NET para ser carregada), você tem de usar um produto da Microsoft (Visual Studio 2005 ou 2008 - pode usar o Express se você quiser um produto gratuito) e criar uma DLL em Managed C++ que possa ser acessada via JNI.

Managed C++ é um dialeto do C++ (também chamado de C++/CLR) que sabe falar com o .NET. Prepare-se para muito choro e ranger de dentes, já que não é trivial fazer o que você quer fazer (e eu não achei muita coisa no Google).

G

Está certo então. Vou me arriscar neste caminho de pedras.

Obrigado thingol

Criado 28 de julho de 2008
Ultima resposta 28 de jul. de 2008
Respostas 9
Participantes 3