Bonjour à tous,

Je m'arrache les cheveux et j'espère que vous pourrez m'empêcher de devenir un chauve précoce !

Ayant besoin d'appeler du C++ en java, je me suis constitué une petite librairie dynamique avec une interface C assez simple encapsulant mon logiciel.
Je n'ai aucun problème avec JNA pour appeler les fonctions de ma librairie nécessitant des argument (même des tableaux) et aucun problème pour lire la valeur de retour de la fonction.
Par contre, je rencontre un problème lorsque je donne à ma fonction un tableau de doubles qui doit être modifié par la fonction C. Il n'y a aucune erreur, mais le contenu du tableau n'est pas modifié.

J'ai écrit ma classe utilisant JNA de la façon suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
package com.mycompany.component.mysoftware.mypackage;
import com.sun.jna.Library;
public interface LibMinamo extends Library
{
	public int ma_fonction(int size, double[] values);
}
Et ma librairie C++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
extern "C" int ma_fonction(int size, double* values)
{
	try
	{
		for(int i = 0; i < size; i++)
			values[i] = 3.1416;
		return 0;
	}
	catch(...){ return 1; }
}
Ce mode de fonctionnement fonctionne bien en lecture, mais je ne parviens pas à faire écrire la librairie dans l'espace mémoire alloué par java.
Je suppose que JNA a donc quelque part fait une copie des données pour le C++.

Pouvez-vous m'éclairer sur une marche à suivre proche de ce que je fais qui serait fonctionnelle ?
Merci d'avance,

Christophe.