Tenho uma DLL em C na qual eu não possuo o código fonte, mas sei quais os metodos que existem dentro dessa DLL, como eu consigo invocar essa DLL no Java.
Eu vi os exemplos do site da Sun funcionaram, mas naquele exemplo tinha o código fonte C.
Tenho uma DLL em C na qual eu não possuo o código fonte, mas sei quais os metodos que existem dentro dessa DLL, como eu consigo invocar essa DLL no Java.
Eu vi os exemplos do site da Sun funcionaram, mas naquele exemplo tinha o código fonte C.
Já faz tempo que eu mexi com JNI, mas respondendo rapidamente sua pergunta:
Não tem como !!! Esquece isso !!!
Agora se vc quiser realmente fazer isso vc vai ter que fazer um proxy em C para acessar essa dl, ou seja, vai ter que fazer um programa em C em conformidade com as especificacões de JNI para acessar as funções da DLL e retorná-las para o Java. A não ser que essa DLL já esteja em conformidade com as especificações do JNI, o que provavelmente não é o caso.
Good Luck !
Bom isso eu sei…
Oque eu to tentando fazer é acessar a DLL feita em C dentro de um programa que vai de acordo com as especificações JNI para retornar pro Java, mas eu não encontrei nenhum exemplo de como fazer isso.
Vc está então escrevendo o seu proxy em C, seguindo as especificações do JNI ??? Então tem que funcionar, qual o problema aí ???
Pensei que vc estava escrevendo um programa em Java para acessar essa DLL. Aí não tem como !!!
Explica melhor o que vc está fazendo !!!
Se você quer um livro, dá para baixar do site da Sun:
ftp://ftp.javasoft.com/docs/specs/jni.pdf
Só que o livro é um pouco antigo, e não dá muitas explicações de como configurar o compilador C para funcionar com seus programas. (Tradução: você vai ter que se virar…
)
Eu apanhei muito com JNI, o suficiente para saber que se possível é melhor evitar usar JNI - que tal escrever um programa em C que se comunique via sockets com seu programa em Java, e que chame as tais DLLs?
Acho que dá menos problemas.

:scrambleup: Olha, velho, não sei não… JNI pode ser chato, mas… Fazer via sockets não é meio que violar meio milhão de regras de “boa conduta” :? Bom, com relação a compiladores, apesar de sempre que o thingol me falou de JNI ele falou em compilador da Micro$oft, eu compilei minha única DLL para JNI com o DevC++ (setando os includes corretamente) e foi até meio fácil… O que me deu mais trabalho foram detalhes que se relacionavam a linguagem C mesmo. Mas se você já tem experiência em C, não vai ser problema…
:arrow: [size=“16”]Veja bem:[/size] :shock: não estou dizendo que não vai te dar trabalho, mas, sei lá… Socket não vai ser ainda mais trabalhoso?
Olá
Não viola nenhuma regra, é portátil e funciona direitinho. Já usei esta alternativa para fazer o Java imprimir boletos.
Não lembro do thingol recomendando usar compilador da M$. Quem geralmente faz esta recomendação sou eu porque já tive problemas usando o BC++ (Borland). Com o VC++ 6.0 é certeza de não dar nenhum chabu.
O JNI é uma gambi da Sun com uma limitadíssima biblioteca. Acredito que os métodos nativos do Java devam usar coisas mais eficientes. Tal como é hoje o JNI só deve ser usado em caso de extrema necessidade como disse o thingol.
[]s
Luca
:arrow: :arrow: :arrow: :arrow: :arrow: :arrow: :arrow: :arrow: :arrow: (podia ter setinha pra baixo também… :lol: )
Para compilar: copie o código abaixo para um arquivo “teste.cpp”, rode o script “vcvars32.bat” (que normalmente está em “arquivos de programas\Micro$oft visual studio .net 2003\vc7\invcvars32.bat”), e use o comando “cl teste.cpp”. Estou supondo que você tem o Visual Studio .NET 2003; se tiver alguma outra versão mais velha, é sempre uma batch com esse nome (vcvars32.bat) que você deve rodar.[/code"]
:scrambleup: Nada contra… Mas achei legal o Dev C++, então… Sem problemas!
[size=“9”]Editado para inserir novamente os “” que são retirados se você não colocar “\” [/size] :?
Bom galera valeu pela ajuda
Consegui fazer o JNI funcionar corretamente usando a DLL que eu tinha em mãos
Obrigado