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
Onde está escrito "-IC:\Program%Files… " etc. use “-IC:\Program Files” (com espaço mesmo) e ponha aspas " em volta de “-IC:\Program Files…”
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).
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.
R
Rendell
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
R
Rendell
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
T
thingol
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).
tenho outra duvida tambem
aonde deve ficar meu arquivo .h?
R
Rendell
esquecido?
T
thingol
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.
A
Andre_Dantas_Rocha
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
R
Rendell
Thingol
Funcionou direitinho sem os servlets e td mais
R
Rendell
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
T
thingol
Rendell:
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.).
R
Rendell
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
:oops:
Provavelmente você vai ter de copiar as tais classes para o lugar referenciado no System Classloader (veja a documentação acima).
R
Rendell
Thingol consegui funcionar de forma que ele chama a DLL
o problema é que ele carrega a DLL e nao descarrega mais
ai precisa matar o servidor pra conseguir acessar de novo
eu andei lendo e isso parece ser um erro conhecido
so nao entendi como que resolve o problema
nao existe um metodo que da um unloadLibrary? 8)
T
thingol
Não diretamente; isso foi solicitado para a Sun mas eles não querem resolver isso.
Você pode criar uma gambiarra, mostrada na seguinte thread:
Atenção: é extremamente difícil usar isso na prática. Só funciona bem se você for muito atento ao que faz com os objetos da sua classe, que deve ter sido completamente desalocada quando você for descarregar a DLL.
É recomendado também ler a seção de “Unload” na página a seguir:
Dá um pouco de trabalho, mas você pode implementar a carga/descarga de uma .dll/.so usando uma dll intermediária e as funções LoadLibrary e FreeLibrary do Windows (dlopen, dlsym e dlclose se for um .so).