JNI - Compilando um .C em .DLL  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Rendell
Thread.start()

Membro desde: 20/10/2008 14:31:45
Mensagens: 27
Offline

Galera seguinte, eu pesquisei bastante na internet to ate cansado de tanto que ja olhei nesse forum aki inclusive
meu problema é o seguinte
eu tenho um sistema que comunica o java com o C, até ai tudo bem usei o JNI para fazer a integracao
o problema é que quando vou compilar o arquivo em C ele me gera uma porção de erros.

eu ja revi o codigo e parece estar tudo em ordem
eu preciso disso pra um trabalho de faculdade e o bixo ta pegando pq o prazo ta acabando kkkk
a figura com os erros estao no anexo se alguem souber alguma coisa eu ficartei muito agradecido
inclusive na figura tambem está o comando que eu usei pra compilar o bixo

Att,
Rendell H. Bernardes
Analista de Sistemas - Cast Informática
Banco do Brasil - GEATE
[Thumb - errodll.jpg]
 Nome do arquivo errodll.jpg [Disk] Download
 Descrição Segue a Figura com o Erro
 Tamanho 153 Kbytes
 Baixado:  92 vez(es)

thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

0) Onde está escrito "-IC:\Program%Files... " etc. use "-IC:\Program Files" (com espaço mesmo) e ponha aspas " em volta de "-IC:\Program Files\..."

1) Para começar, é recomendável usar Microsoft Visual C++ 2005 (que é o usado para compilar o próprio JDK) em vez de gcc, embora seja possível usar o gcc com algumas restrições (não sei exatamente quais).

2) Por que é que você está usando AES em C++? Use o suporte a AES que já existe no Java. É mais seguro e, embora não seja tão rápido quando o do C++, não é tão difícil assim de usar.
[WWW]
Rendell
Thread.start()

Membro desde: 20/10/2008 14:31:45
Mensagens: 27
Offline

YOU ARE A GENIUS!!!!!!!

cara... funcionou... tu nao tem nocao que eu ralei nesse treko mto hehehe
valeu mesmo parceiro problema resolvido

seguinte eu to usando o C pq e obrigado o núcleo do programa ser em C
ai nao tem como correr

obrigado mais uma vez
Rendell
Thread.start()

Membro desde: 20/10/2008 14:31:45
Mensagens: 27
Offline

Seguinte consegui compilar tranquilo a DLL agora tem outro problema...
eu nao consigo fazer o Java acessá-la
eu coloquei o System.LoadLibrary("dll.dll");
e o Tomcat ta retornando pra mim uma mensagem de erro dizendo que nao consegue achar a biblioteca
eu tenho que copiar a DLL pra alguma pasta?
tenho q joga-la no system 32 do windows?
uma luz ai galera

obrigado
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

a) A DLL deve ficar em um diretório entre os que estão listados na variável System.getProperty ("java.library.path"), ou então em c:\windows\system32 (caso seja uma DLL de 32 bits e você estiver usando um Windows de 32 bits e um Java de 32 bits, o que é mais provável).

b) Você pode usar System.loadLibrary ("nomeDaBiblioteca") (sem a extensão DLL) ou System.load ("c:\\diretorio\\biblioteca.dll") (com a extensão e o diretório).


[WWW]
Rendell
Thread.start()

Membro desde: 20/10/2008 14:31:45
Mensagens: 27
Offline

nao consegui resolver aqui
vou postar o erro aqui

Segue o código



Segue o Erro:

Rendell
Thread.start()

Membro desde: 20/10/2008 14:31:45
Mensagens: 27
Offline

tenho outra duvida tambem
aonde deve ficar meu arquivo .h?
Rendell
Thread.start()

Membro desde: 20/10/2008 14:31:45
Mensagens: 27
Offline

esquecido?
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Dica: teste a tal classe JNI dentro de uma aplicação Java simples (sem ser servlet nem nada), daquelas que só tem um "public static void main" e meia dúzia de linhas.
Quando ela funcionar, então veja se ela funciona em um servlet.
[WWW]
ad-rocha
Thread.start()

Membro desde: 26/11/2004 13:38:26
Mensagens: 25
Offline

Rendell,

Dê uma olhada na edição 36 da Java Magazine. Publiquei um artigo completo explicando os conceitos e procedimentos, além de um programa exemplo.

[]'s,

Andre
Rendell
Thread.start()

Membro desde: 20/10/2008 14:31:45
Mensagens: 27
Offline

Thingol

Funcionou direitinho sem os servlets e td mais
Rendell
Thread.start()

Membro desde: 20/10/2008 14:31:45
Mensagens: 27
Offline

ad-rocha

infelizmente obtive essa menssagem

ATENÇÃO! A EXIBIÇÃO DESTE ARTIGO FOI INTERROMPIDA.

Este é um post fechado

Este post está disponível para quem é assinante da Java Magazine GOLD ou para quem possui Créditos DevMedia. Clique aqui para saber mais sobre como visualizar este post!

Como nao sou assinante nao pude ler o artigo :/
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Rendell wrote:Thingol

Funcionou direitinho sem os servlets e td mais


Isso é uma boa pista: quer dizer que você tem de pôr essa classe Java com "public native blablabla...", não no WEB-INF/classes de sua aplicação, mas em algum lugar no seu web container que permita carregar uma classe e nunca mais descarregá-la (ou seja, é uma biblioteca global que pode ser usada por todas as aplicações.) Se seu web container não tem isso, você pode usar a gambi de copiar a classe (em um .jar de preferência) em jre\lib\ext (diretório de bibliotecas da JRE usada pelo seu web container.).





[WWW]
Rendell
Thread.start()

Membro desde: 20/10/2008 14:31:45
Mensagens: 27
Offline

eu estou usando o glassfish vc sabe onde seria isso na arvore de endereco dela?

eu nao sei como fazer essa gambiarra ai...
seria alguma coisa com um comando do DOS mesmo pra fazer um copy?
desculpe mais nao consegui entender direito nao
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

https://glassfish.dev.java.net/javaee5/docs/DG/beade.html

Provavelmente você vai ter de copiar as tais classes para o lugar referenciado no System Classloader (veja a documentação acima).
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team