¿Cómo puedo llamar a un método con esta firma de método en C de JNA?¿Cómo obtener un nuevo puntero en Java?
int open_device(context *ctx, device **dev, int index);
Las dos últimas líneas del método C se ven así:
*dev = pdev;
return 0;
Ese es el único uso de dev
en ese método. Eso significa que tengo que pasar un poiner a un puntero vacío para el método, ¿verdad? El método luego llena el puntero vacío con la dirección de un objeto device
y puedo pasar el puntero al dispositivo a otros métodos.
Mi pregunta es: ¿Es esta la manera correcta de hacerlo? Si es así, ¿cómo puedo asignar un nuevo puntero desde Java?
Sobre la base de la respuesta aceptada, lo hice:
Memory p = new Memory(Pointer.SIZE);
Memory p2 = new Memory(Pointer.SIZE);
p.setPointer(0, p2);
nativeLib.open_device(ctx, p, index);
return p2;
Sólo curiosidad: ¿su código actualizado funciona para usted? Parece que está configurando '* p = p2' pero luego la función C haría' * p = pdev', sobrescribiendo así el valor. – casablanca
@casablanca: Sí, lo probé, funciona. – thejh
@thejh ¿sabe cómo manejar la excepción de AccessMemory no válida creada debido a direcciones de memoria no válidas? – mayooran