Comment puis-je appeler une méthode avec cette signature de méthode en C à partir de JNA?Comment obtenir un nouveau pointeur en Java?
int open_device(context *ctx, device **dev, int index);
Les deux dernières lignes de la méthode C ressemblent à ceci:
*dev = pdev;
return 0;
C'est la seule utilisation de dev
dans cette méthode. Cela signifie que je dois passer un pointeur vers un pointeur vide vers la méthode, non? La méthode remplit alors le pointeur vide avec l'adresse d'un objet device
et je peux passer le pointeur vers le périphérique à d'autres méthodes.
Ma question est: Est-ce la bonne façon de faire cela? Si c'est le cas, comment allouer un nouveau pointeur depuis Java?
Sur la base de la réponse acceptée, je l'ai fait:
Memory p = new Memory(Pointer.SIZE);
Memory p2 = new Memory(Pointer.SIZE);
p.setPointer(0, p2);
nativeLib.open_device(ctx, p, index);
return p2;
Juste curieux: votre code mis à jour a-t-il fonctionné pour vous? Il semble que vous définissiez '* p = p2' mais la fonction C ferait alors' * p = pdev', écrasant ainsi la valeur. – casablanca
@casablanca: Oui, je l'ai testé, ça marche. – thejh
@thejh savez-vous comment gérer l'exception invalidMemoryAccess créée en raison d'adresses mémoire invalides pointées? – mayooran