Bom dia ao pessoal do GUJ.
Eu escrevi um arquivo em C que tem uma função cujo o retorno é uma estrutura.
struct estrutura *nome_funcao(){
/*Corpo do código, atribuição de valor a estrurura.*/
return estrutura;
}
Eu preciso passar essa estrutura pro Java. Daí, lendo a API do JNA, vi que para receber
estruturas do C no Java, devo criar uma classe que estenda Structure e que tenha uma interface
interna que estenda CallBack. Fiz assim:
/*Esta classe deverá ser responsável por receber uma estrura em C*/
public class ClasseEstrutura extends Structure{
/*Interface interna*/
public interface EstruturaASerRecebida extends CallBack(){
/*método com o mesmo nome da função em C*/
public Structure nome_funcao();
}
/*Instância para poder acessar a interface interna*/
public EstruturaASerRecebida estrutura;
}
Ok, agora que vem a dúvida. Pra quem conhece JNA, sabe que deve haver uma interface
que estende Library, e que todos os métodos dessa interface devem possuir os mesmos
nomes das funções em C. Se é assim, então eu não deveria ter escrito a classe acima,
e sim apenas ter feito:
public interface MetodosNativos extends Library{
public Structure nome_funcao();
}
Mas já tentei fazer isso e não funcionou.
Lendo na API do JNA, vi que pra usar o CallBack, deveria ter feito mais ou menos assim:
ClasseEstrutura ce = new ClasseEstrutura();
/**Não entendi e nem encontrei esse método init*/
lib.init(ce);
Structure x = ce.estrutura.nome_funcao();
O que eu não entendi do código acima:
- Quem é lib?
- De onde vem esse método init?
- Em qual classe esse código deve ser escrito?
Eles estão lá na página do JNA, mas eu realmente não entendi, pois acho que eles não deixaram muito
claro… Eu só estou pedindo um help pro pessoal porque hoje não consegui acessar nem o site do JNA e nem a API.
Tá dando pau e eu não sei se é aqui ou lá. De qualquer maneira, se alguém puder me ajudar a entender esses
carinhas do último exemplo, fico grato. Abraço.