Olá All,
Estou tendo problema em uma função de callback e gostaria de uma ajuda. Estou usando uma dll que tem uma função de callback e a defini em java, usando JNA, para o código abaixo:public void callback(Pointer Params, int ParamSize, int cmd)
typedef struct
{
int x;
int y;
}Point;
Point *gpt;
typedef struct
{
int x;
int y;
Point pt1;
}Point2;
Point2 *gpt2;
public class Point extends Structure
{
public static class ByValue extends Point implements Structure.ByValue {}
public static class ByReference extends Point implements Structure.ByReference{}
public int x;
public int y;
public Point(Pointer p){
super(p);
}
public Point(){
super();
}
}
public class Point2 extends Structure {
public static class ByValue extends Point2 implements Structure.ByValue {}
public static class ByReference extends Point2 implements Structure.ByReference{}
public int x;
public int y;
Point pt1 = new Point();
public Point2(Pointer p){
super(p);
}
public Point2(){
super();
}
}
public void callback(Pointer Params, int ParamSize, int cmd) {
switch (cmd){
case 1:
Point2 pt2; // = new Point2();
pt2 = new Point2(Params);
pt2.read();
System.out.println("pt2.x = "+pt2.x); //Aqui o valor mostrado é 4 e está correto.
System.out.println("pt2.y = "+pt2.y); //Aqui o valor mostrado é 5 e está correto.
System.out.println("pt2.pt1.x = "+pt2.pt1.x); //Porém, aqui o valor é zero e deveria ser 6.
System.out.println("pt2.pt1.y = "+pt2.pt1.y); //Aqui o valor é zero e deveria ser 7.
break;
case 2:
...qualquer código...
default:
...qualquer código...
}
}
Não estou passando corretamente o pointer (Params) da estrutura em C para o construtor da Point2 em java. Da forma como fiz a estrutura Point2 é atualziada corretamente apenas para os campos x e y, a estrutura pt1 não é atualizada.
Já fiz algumas tentativas sem sucesso, inclusive passando o mesmo pointer para o construtor de Point, quando faço isto o valor mostrado para pt2.pt1.x e pt2.pt1.y é o mesmo que pt2.x e pt2.y.
Como faço para inicializar uma estrutura aninhada em java usando o pointer recebido ?
Agradeço se alguém puder dar uma ajuda.
Fernando.