Je suis nouveau sur JNI et j'ai un programme Java à partir duquel je veux appeler des méthodes en C++. J'ai un ObjectA implémenté en Java. Je reçois son ID de classe comme ceci en C++:JNI: Appeler une méthode Java en C++ avec un objet comme argument
jclass cls = env->FindClass("myPackages/ObjectA");
Maintenant, j'ai la méthode funcA donnée en Java. funcA accepte un objet de type ObjectA comme argument et renvoie un entier. La déclaration en Java ressemble à ceci:
public int funcA(ObjectA obj);
Maintenant, je veux obtenir le methodID de FoncA en C++. Le problème est, je ne sais pas comment spécifier quel parametype la méthode obtient. Je sais que je dois écrire L pleinement qualifié; passer des objets comme une chaîne, mais comment faire, quand les objets ne proviennent pas de javalibraries officielles mais d'objets que j'ai créés? J'ai essayé, mais il est évident qu'elle ne fonctionne pas:
jmethodID jfuncA = env->GetMethodID(cls, "funcA", "(Lcls;)I");
Tout ce que je suis arrivé en réponse est que la méthode n'a pas été trouvé. Alors qu'est-ce que je dois écrire au lieu de (Lcls;)? Ou est-ce impossible?
Toute idée est utile!
Ce n'est tout simplement pas le fonctionnement du langage de programmation C++. 'cls' est une variable dans votre code. Vous ne pouvez pas l'utiliser dans un littéral de chaîne! Pourquoi n'écrivez-vous pas 'myPackages/ObjectA' à la place? Alors ça marcherait. –