estou tentando pegar uma clsse escrita em java no codigo c para usar e implementar métodos, porém ocorre um erro qndo eu tento pegar uma instancia da classe que eu fiz:
mensagem de erro:
erro: ?use_Classe? was not declared in this scope
erro: ?unuse_Classe? was not declared in this scope[/code]
codigo em c++:
[code]
Classe::_use(env);
Classe::_unuse(env);
mensagem de erro:
erro: ?Classe? has not been declared
erro: ?_use? was not declared in this scope
erro: ?Classe? has not been declared
erro: ?_unuse? was not declared in this scope[/code]o codigo esta incluindo Classe.h e a variavel env esta sendo inicializada d maneira correta
meu codigo antigo q isto funciona gera um arquivo stubs com o javah, mas meu projeto novo nao possui esse stubs, sera q o problema esta ai? se esta, como faço pra ter essa instancia de minha classe usando o jni 5? e se o prob nao é a falta do stubs qual é entao?
O que estas funções/métodos fazem (poste o código)? Com o pouco de informação que você passou fica difícil ajudar.
Como eu já te disse em outra mensagem, o formato de chamada a código nativo mudou totalmente a partir da versão 1.2. Não tem jeito, você vai ter que re-escrever seu código.
cara, o codigo antigo nao foi eu qm escreveu, estou aprendendo a mexer com jni agora, eu disse ‘meu codigo’ como força de expressao, pq é oq eu tenho aqui como refencia da api para meu projeto
nao sei em qual versao a api antiga foi compilada, mas parece ser anterior à 1.2, ja q ela apresenta alguns recursos antigos como vc disse no outro topico
mas eu estou tendo varios outros problemas com essa api q estou trabalhando, acho q a maioria deles por inexperincia com jni, mas tive q fazer varias mudandcas nos codigos e só postei aqui problemas q nao consegui resolver
realmente faltou muita explicacao vou tentar explicar melhor oq o codigo faz:
a api q eu uso possui codigos em java e em c/c++, existe uma classe escrita em java que é a base da api, onde eu posso usala diretamente no codigo c/c++ ou herda-la pra q tenha outras funcionalidades e acrecentar alguns metodos nativos ou nao, e existem algumas funcoes em c q eu tenho q implementar, sao funcoes chamadas pela propia api em uso, qndo ocorre algum evento
uma coisa interessante é q o exemplo q eu tenho compila o codigo em c sem problemas, e no codigo q estou construindo q ocorre esse erro, nao existe nenhum parametro de compilacao diferente, pelo menos aparentemente né, pois concerteza algo esta faltando…
foi mal cara, nao postei o codigo pq nao tinha ele na mesma maquina q postei a ultima msg
esses sao os unicos trechos q usam jni, as partes comentadas sao as opcoes de codigo em c++, ambas nao funcionam
nao se preocupe com a funcao GetJavaEnv, ela funciona…
Esse ClasseJava.h é o header da implementação das funçoes que você está querendo usar, você tem o fonte da implementação ou o objeto compilado?
No seu compilador você configurou tudo certo, que compilador você usa?
Outra coisa, o seu código antigo também inclui o jni.h?
sim, eu tenho a classe compilada, neste codigo estou tentando acessar uma classe q eu mesmo fiz, todos os arquivos estao no mesmo diretorio (.java, .class e .h), no exmplo q eu tenho existe uma classe Simple.java com o codigo fonte, e todos os arquivos (.java, .class, .h e simple.c q esta o codigo nativo), inclusive os stubs q, como vc disse no outro topico, nao sao mais gerados pelo javah
versao dos compiladores:
[code]
$ java -version
java version “1.5.0_06”
Java™ 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot™ Client VM (build 1.5.0_06-b05, mixed mode, sharing)
Você teria que analisar esse código e confirmar que mecanismo de chamada a código nativo ele usa (antigamente cada VM tinha o seu). Se for feita para a JVM da Microsoft, por exemplo, não vai rodar em Linux. O código já existente você consegue rodar no Ubuntu?
Você tem que passar ao seu compilador (o GCC) onde encontrar as bibliotecas (.a e .so), os fontes (.c ou .cpp) e os headers (.h) que você está usando, mais algumas configurações que dependem do seu projeto.
Se puder, poste o código dessa função “use_Classe(env)”.
enquanto ao compilador, estou sim informando onde estao as biliotecas, mas uma de minhas desconfiancas é q falta alguma delas, a outra é q pode ter mudado a forma de se obter o objeto
ou ta faltando informaçao ou eu nao estou conseguindo entender como as coisas funcionam (a segunda opcao é mais provavel)…
eu procurei neste guia da sun sobre meu problema mas nao achei nada
posso sim mostrar o codigo da minha classe java, mas nao ha nada d+ nela, ainda é apenas um teste
[code]
public class ClasseJava
{
public ClasseJava() {}
[quote=quikkoo]
posso sim mostrar o codigo da minha classe java, mas nao ha nada d+ nela, ainda é apenas um teste
[code]
public class ClasseJava
{
public ClasseJava() {}
public String mensagem()
{
return "deu certo";
}
}[/code][/quote]
Eu me referi ao código dessa função: “use_Classe(env),” como é o código dessa função? Note que ela está em português, deve ter alguma implementação particular ali.
Coloque também as mensagens completas de erro que o GCC te deu.
ah, foi mal, mas eu pensei q ja tivesse esplicado isso, a sintaxe é a seguinte:
(un)use_<nome da classe>(env);esse codigo é gerado pelo javah… nao sei em arquivo esta, pq eu só tenho os .h q ele gera
mas eu to achando q ele era gerado, e nao é mais, isso porque nao exitem mais os stubs e tal, e pelo q eu estive lendo aqui parece q sao neles q essa funcao é definida
bom, d qlqr forma eu já agradeço sua boa vontade em me ajudar, vou continuar tentando aqui… flw , t+