Seja bem vindo ao Fórum do JavaFree.org
Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login
teu tutorial é muito bom... porem, ainda me resta um duvida...
e se eu não puder alterar a dll ??? se essa dll é disponibilizada por alguem, e essa pessoa fez a dll sem pensar em JNI ??? esse é meu caso... ja li o tutorial da sun... mais ainda não sei se essa convensão, é obrigatoria ou simplesmente é padrão...
seria interessante que sabendo a assinatura dos metodos, não importa a linguagem, o JNI poderia fazer isso sem que o programador conhecesse a linguagem nativa...
existe como isso ser feito???
_________________ JavaFree.org
Infelizmente não há essa possibilidade, devido ao fato de o JNI ser um interface entre o java e uma linguagem qualquer. Para que o Java reconheça o código nativo é necessário estar implementanto os tipo(ou objetos) JNI.
É importante que você tenha os fontes da biblioteca, e depois, apenas adeque aos padrões JNI.
_________________ JavaFree.org
teu tutorial é muito bom... porem, ainda me resta um duvida...
e se eu não puder alterar a dll ??? se essa dll é disponibilizada por alguem, e essa pessoa fez a dll sem pensar em JNI ??? esse é meu caso... ja li o tutorial da sun... mais ainda não sei se essa convensão, é obrigatoria ou simplesmente é padrão...
seria interessante que sabendo a assinatura dos metodos, não importa a linguagem, o JNI poderia fazer isso sem que o programador conhecesse a linguagem nativa...
existe como isso ser feito???
Na verdade, isso pode ser feito. Mas o programador precisa não só conhecer Java, mas outra linguagem para poder carregar uma biblioteca nativa através de outra.
Basta na sua biblioteca nativa que será utilizada pela JNI você chamar os métodos da biblioteca nativa de terceiros. Ou seja, a idéia é criar um DLL Wrapper (ou Shared Object Wrapper) para sua biblioteca customizada.
Porém, você precisa conhecer os métodos exportados pela sua biblioteca nativa. Não é difícil.
Pra te ajudar com o desenvolvimento, existe um padrão chamado Peer Pattern.
_________________ Jean R. Rodrigues Oracle/J2EE Premium Support Engineer Instrutor Certificado Sun e Oracle (Especialista América Latina) Certified ScrumMaster
Alguem pode me dizer qual é o comando equivalente ao que esta acima em GCC?(o que esta acima é do tutorial e é pra compilador VC somente)
Pior que não lembro mesmo o comando no GCC pra criar DLLs.......
Pior que acabei de lembrar,não sei se foi o correto:
Consegui criar a dll sim mas quando dou o comando aparece é algo como isso:
Será que foi erro do comando no GCC?Gerou errado a DLL,pois o codigo esta certo sim tanto é que testei com a DLL que foi disponibilizada em HlloWorld.zip e deu certo mas com a DLL que eu gero ai sim que da erro mostrado acima......enfim alguem pode me ajudar? :roll:
_________________ JavaFree.org
Tente copiar os aquivos "jni.h" e "jni_md.h" do J2SDK, para o diretório INCLUDE do compilador C++. Depois gere a DLL novamente.
_________________ JavaFree.org
Alguem pode me dizer qual é o comando equivalente ao que esta acima em GCC?(o que esta acima é do tutorial e é pra compilador VC somente)
Pior que não lembro mesmo o comando no GCC pra criar DLLs.......
Pior que acabei de lembrar,não sei se foi o correto:
Consegui criar a dll sim mas quando dou o comando aparece é algo como isso:
Será que foi erro do comando no GCC?Gerou errado a DLL,pois o codigo esta certo sim tanto é que testei com a DLL que foi disponibilizada em HlloWorld.zip e deu certo mas com a DLL que eu gero ai sim que da erro mostrado acima......enfim alguem pode me ajudar? :roll:
Nossa nenhuma resposta nesses dias me fizeram virar uma noite(com Coca-cola ) fazendo uns testes ,lendo o manual do GCC e o bom e velho Google........
Bom não me perguntem porque fiz isso mas o codigo correto no GCC pra gerar a DLL é
Agora deu certo ..........!
_________________ JavaFree.org
Gostei muito do seu artigo publicado sobre JNI. Estou seguindo as etapas que vc fez, para que o meu código Java acesse bibliotecas em C++, só que está dando o seguinte erro:
java.lang.UnsatisfiedLinkError: displayHelloWorld at hello.HelloWorld.displayHelloWorld(Native Method) Exception in thread "main" 03 03
Acho que não estou gerando a dll corretamente. O seu exemplo, igual a este, funciona.
Com este artigo consegui ter acesso as funções do C pelo Java. Estou querendo saber se é possível ter acesso a estrutura do C, vamos supor que eu queira acessar do meu código Java o atributo nome do Código C++. Será que é possível?
estou fazendo uma aplicação jni e quando rodei o programa deu um erro:
Quote:
An unexpected exception has been detected in native code outside the VM. Unexpected Signal : EXCEPTION_PRIV_INSTRUCTION (0xc0000096) occurred at PC=0x77C0F62B Function=outp+0xB Library=C:\WINDOWS\system32\MSVCRT.dll
Current Java thread: at sups.comunica.portas.PortaComm.writeOneByte(Native Method) at sups.comunica.portas.PortaComm.write(PortaComm.java:4 at Serial.main(Serial.java:9)
Heap at VM Abort: Heap def new generation total 576K, used 123K [0x10010000, 0x100b0000, 0x104f0000) eden space 512K, 24% used [0x10010000, 0x1002ef08, 0x10090000) from space 64K, 0% used [0x10090000, 0x10090000, 0x100a0000) to space 64K, 0% used [0x100a0000, 0x100a0000, 0x100b0000) tenured generation total 1408K, used 0K [0x104f0000, 0x10650000, 0x14010000) the space 1408K, 0% used [0x104f0000, 0x104f0000, 0x104f0200, 0x10650000) compacting perm gen total 4096K, used 992K [0x14010000, 0x14410000, 0x18010000) the space 4096K, 24% used [0x14010000, 0x14108140, 0x14108200, 0x14410000)
Local Time = Wed Apr 06 14:21:56 2005 Elapsed Time = 0 # # The exception above was detected in native code outside the VM # # Java VM: Java HotSpot(TM) Client VM (1.4.2_06-b03 mixed mode) #
compilei a biblioteca dinamica com o comando: gcc -Wl,--kill-at, -I%JAVA_HOME%\include\win32 -I% JAVA_HOME%\include -shared PortComm.c -o PortComm.dll
sou usuario do windows, e uso o compilador da brolando tcpp 3.0v, pra rodar minhas aplicações então o que não ficou claro para mim neste tutorial é como gerar a .dll esse comnado eu coloco é no dos? ou aonde? se puderem me esclarecer ficarei grato
teu tutorial é muito bom... porem, ainda me resta um duvida...
e se eu não puder alterar a dll ??? se essa dll é disponibilizada por alguem, e essa pessoa fez a dll sem pensar em JNI ??? esse é meu caso... ja li o tutorial da sun... mais ainda não sei se essa convensão, é obrigatoria ou simplesmente é padrão...
seria interessante que sabendo a assinatura dos metodos, não importa a linguagem, o JNI poderia fazer isso sem que o programador conhecesse a linguagem nativa...
existe como isso ser feito???
Estou com o mesmo problema do Rodrigo. Preciso usar uma biblioteca de terceiro, que muito provavelmente não foi escrita nos padrões JNI. Vi a dica do JRodrigues, em criar uma biblioteca itermediária que converse com a outra biblioteca.
Tenho algumas perguntas: 1º) Alguém sabe como chamo uma dll em C ? 2º) Tenho como saber em que linguagem uma dll foi compilada ? 3º) Tenho como fazer uma engenharia reversa em uma dll ?
Estou desenvolvendo meu Trabalho de Conclusão de Curso e neste, vou precisar fazer balanceamento de carga.
Alguém sabe se em Java ou em C existe alguma função ou método que me possibilite buscar informações do Hardware ? Mais especificamente do Processador e da Memória ! Preciso saber a frequência do processador e a quantidade de memória.
Estou desenvolvendo uma aplicação distribuída em Java e, caso esta função seja em C, pretendo utilizar o JNI mesmo.
O comando para criar a dll só pode ser dado no windows? Não tem como fazer com q ele crie a .dll e o .so de uma só vez? _________________
programmer.setFucked(user.isStupid() );
Tenho o seguinte header de uma função de uma dll em C++:
Preciso chamar essa função numa aplicação em Java. Graças a esse tutorial já consigo chamar a dll no Java. Porém estou com dificuldade para receber os valores da função dado que eles são retornados através de ponteiros. Alguém tem uma idéia de como eu posso retornar as informações para o Java através do JNI sem ter que alterar a estrutura de return?
Como eu fujo desses ponteiros dessa função e consigo enviar os parâmetros para o Java.
a estrutura que eu tenho agora é: Em Java a função nativa esta assim declarada:
e o JNI me gerou a seguinte header:
Porém desta forma eu não tenho como enviar os parâmetros. Será que alguém pode me ajudar?
Anunciante
cleuber_s Offline
Posts: 210
Esta página exibe apenas os comentários deste tutorial, para ler o artigo, clique aqui.
rodrigomaia Offline
Posts: 3
Olah,
teu tutorial é muito bom... porem, ainda me resta um duvida...
e se eu não puder alterar a dll ??? se essa dll é disponibilizada por alguem, e essa pessoa fez a dll sem pensar em JNI ??? esse é meu caso... ja li o tutorial da sun... mais ainda não sei se essa convensão, é obrigatoria ou simplesmente é padrão...
seria interessante que sabendo a assinatura dos metodos, não importa a linguagem, o JNI poderia fazer isso sem que o programador conhecesse a linguagem nativa...
existe como isso ser feito???
_________________
JavaFree.org
cleuber_s Offline
Posts: 210
Infelizmente não há essa possibilidade, devido ao fato de o JNI ser um interface entre o java e uma linguagem qualquer. Para que o Java reconheça o código nativo é necessário estar implementanto os tipo(ou objetos) JNI.
É importante que você tenha os fontes da biblioteca, e depois, apenas adeque aos padrões JNI.
_________________
JavaFree.org
jrodrigues Offline
Posts: 1338
Na verdade, isso pode ser feito.
Mas o programador precisa não só conhecer Java, mas outra linguagem para poder carregar uma biblioteca nativa através de outra.
Basta na sua biblioteca nativa que será utilizada pela JNI você chamar os métodos da biblioteca nativa de terceiros.
Ou seja, a idéia é criar um DLL Wrapper (ou Shared Object Wrapper) para sua biblioteca customizada.
Porém, você precisa conhecer os métodos exportados pela sua biblioteca nativa. Não é difícil.
Pra te ajudar com o desenvolvimento, existe um padrão chamado Peer Pattern.
_________________
Jean R. Rodrigues
Oracle/J2EE Premium Support Engineer
Instrutor Certificado Sun e Oracle (Especialista América Latina)
Certified ScrumMaster
Anunciante
cleuber_s Offline
Posts: 210
Realmente, pode ser criada um biblioteca que implenta o JNI, para carregar a outra que não usa.
_________________
JavaFree.org
HumbertoJr Offline
Posts: 251
Eh
Alguem pode me dizer qual é o comando equivalente ao que esta acima em GCC?(o que esta acima é do tutorial e é pra compilador VC somente)
Pior que não lembro mesmo o comando no GCC pra criar DLLs.......
_________________
JavaFree.org
HumbertoJr Offline
Posts: 251
Eh
Pior que acabei de lembrar,não sei se foi o correto:
Consegui criar a dll sim mas quando dou o comando aparece é algo como isso:
Será que foi erro do comando no GCC?Gerou errado a DLL,pois o codigo esta certo sim tanto é que testei com a DLL que foi disponibilizada em HlloWorld.zip e deu certo mas com a DLL que eu gero ai sim que da erro mostrado acima......enfim alguem pode me ajudar? :roll:
_________________
JavaFree.org
cleuber_s Offline
Posts: 210
Tente copiar os aquivos "jni.h" e "jni_md.h" do J2SDK, para o diretório INCLUDE do compilador C++. Depois gere a DLL novamente.
_________________
JavaFree.org
HumbertoJr Offline
Posts: 251
Essa dica ja estava no tutorial e eu ja a tinha feito ,mesmo assim deu o erro listado acima
_________________
JavaFree.org
HumbertoJr Offline
Posts: 251
Eh
Nossa nenhuma resposta nesses dias me fizeram virar uma noite(com Coca-cola ) fazendo uns testes ,lendo o manual do GCC e o bom e velho Google........
Bom não me perguntem porque fiz isso mas o codigo correto no GCC pra gerar a DLL é
Agora deu certo ..........!
_________________
JavaFree.org
flavialares Offline
Posts: 10
EhBoa tarde!!
Gostei muito do seu artigo publicado sobre JNI. Estou seguindo as etapas que vc fez, para que o meu código Java acesse bibliotecas em C++, só que está dando o seguinte erro:
java.lang.UnsatisfiedLinkError: displayHelloWorld
at hello.HelloWorld.displayHelloWorld(Native Method)
Exception in thread "main" 03 03
Acho que não estou gerando a dll corretamente. O seu exemplo, igual a este, funciona.
P.s: Estou utilizando o Visual C++.
Poderia me ajudar?
Muito Obrigada,
Flávia
flavialares Offline
Posts: 10
Oi pessoal,
Obrigada , já consegui resolver meu problema.
O problema não era com a geração da dll , e sim com a geração do .h.
Muito Obrigada,
Flávia
flavialares Offline
Posts: 10
Oi pessoal,
Aproveitando o artigo sobre JNI, é possível através do JNI, pegar uma estrutura em C++ e criar uma classe Java com esses dados do C++?
Desde já agradeço,
Flávia
flavialares Offline
Posts: 10
Olá!!
Com este artigo consegui ter acesso as funções do C pelo Java. Estou querendo saber se é possível ter acesso a estrutura do C, vamos supor que eu queira acessar do meu código Java o atributo nome do Código C++. Será que é possível?
Obrigada,
Flávia
fabioviana Offline
Posts: 26
Ehola galera!
estou fazendo uma aplicação jni e quando rodei o programa deu um erro:
compilei a biblioteca dinamica com o comando:
gcc -Wl,--kill-at, -I%JAVA_HOME%\include\win32 -I%
JAVA_HOME%\include -shared PortComm.c -o PortComm.dll
Alguém pode me ajudar???
bslima Offline
Posts: 1
sou usuario do windows,
e uso o compilador da brolando
tcpp 3.0v, pra rodar minhas aplicações
então o que não ficou claro para mim neste tutorial
é como gerar a .dll
esse comnado eu coloco é no dos?
ou aonde?
se puderem me esclarecer ficarei grato
ricardoamaral Offline
Posts: 0
Estou com o mesmo problema do Rodrigo.
Preciso usar uma biblioteca de terceiro, que muito provavelmente não foi escrita nos padrões JNI.
Vi a dica do JRodrigues, em criar uma biblioteca itermediária que converse com a outra biblioteca.
Tenho algumas perguntas:
1º) Alguém sabe como chamo uma dll em C ?
2º) Tenho como saber em que linguagem uma dll foi compilada ?
3º) Tenho como fazer uma engenharia reversa em uma dll ?
Agradeço desde ja!
rerodri84 Offline
Posts: 3
Pessoal,
Estou desenvolvendo meu Trabalho de Conclusão de Curso e neste, vou precisar fazer balanceamento de carga.
Alguém sabe se em Java ou em C existe alguma função ou método que me possibilite buscar informações do Hardware ? Mais especificamente do Processador e da Memória ! Preciso saber a frequência do processador e a quantidade de memória.
Estou desenvolvendo uma aplicação distribuída em Java e, caso esta função seja em C, pretendo utilizar o JNI mesmo.
Abraço galera e desde já obrigado
Renan
Lich King Offline
Posts: 46
O comando para criar a dll só pode ser dado no windows?
Não tem como fazer com q ele crie a .dll e o .so de uma só vez?
_________________
programmer.setFucked(user.isStupid() );
chermont Offline
Posts: 2
Olá Galera,
Tenho o seguinte header de uma função de uma dll em C++:
Preciso chamar essa função numa aplicação em Java. Graças a esse tutorial já consigo chamar a dll no Java. Porém estou com dificuldade para receber os valores da função dado que eles são retornados através de ponteiros.
Alguém tem uma idéia de como eu posso retornar as informações para o Java através do JNI sem ter que alterar a estrutura de return?
Como eu fujo desses ponteiros dessa função e consigo enviar os parâmetros para o Java.
a estrutura que eu tenho agora é:
Em Java a função nativa esta assim declarada:
e o JNI me gerou a seguinte header:
Porém desta forma eu não tenho como enviar os parâmetros.
Será que alguém pode me ajudar?
Abraços
Relacionados
declaração de função http://javafree.uol.com.br/topic-865232-declaracao-de-funcao.html Cobol com JAVA http://javafree.uol.com.br/topic-858483-Cobol-com-JAVA.html Gravando e lendo em endereços de memória http://javafree.uol.com.br/topic-13412-Gravando-e-lendo-em-enderecos-de-memoria.html Conversor de C++ para JAVA http://javafree.uol.com.br/topic-1778-Conversor-de-C++-para-JAVA.html JNI (Java Native Interface) http://javafree.uol.com.br/topic-3737-JNI-Java-Native-Interface.html Programação direta no hardware http://javafree.uol.com.br/topic-13361-Programacao-direta-no-hardware.html Porta paralela http://javafree.uol.com.br/topic-4536-Porta-paralela.html Siglas e mais siglas http://javafree.uol.com.br/topic-6301-Siglas-e-mais-siglas.html Mostrar posição de Memória da Variável! http://javafree.uol.com.br/topic-874776-Mostrar-posicao-de-Memoria-da-Variavel.html
Anunciante