Question

Dire que j'ai un C ++ DLL avec une seule méthode exportée comme:

CustomerProcessor* getInstance();

i.e.. il retourne simplement une instance de la classe qui contient en fait les méthodes que je dois appeler.

Je sais que je peux mapper la méthode getInstance () à une classe en Java à l'aide de la JNA (extension com.sun.jna.Library), stocker l'instance CustomerProcessor retourné dans un com.sun.jna.Pointer.

Puis-je alors la carte en quelque sorte ce à la classe CustomerProcessor pour que je puisse appeler des méthodes sur (et si oui, comment)?

Était-ce utile?

La solution

Pour toute définition arbitraire type* function() vous pouvez mapper la méthode utilisant la JNA comme un retour com.sun.jna.Pointer, mais vous ne serez pas en mesure d'invoquer des méthodes sur un objet de C de la JNA de.

Une solution simple pour ce serait d'écrire une bibliothèque d'interface C qui invoque simplement la méthode sur les objets pour vous ... donc si vous avez une fonction de membre foo(), vous pouvez exporter une méthode C à partir de votre code C ++:

extern "C" void bar(type* var){
   var->foo();
}

Il est évident que cela va ajouter un peu de travail pour vous ... mais je soupçonne que les frais généraux pour le passage à JNI serait à peu près le même.

Autres conseils

JNAerator peut faire ce que vous facilitent la demandez. Il a un certain soutien pour demangling et l'accès vtable (requis pour appeler * ces méthodes).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top