Создать Java-метод для конструктора - PullRequest
10 голосов
/ 01 октября 2011

Я пишу программу на Java, и я хотел бы создать собственный интерфейс для библиотеки, написанной на C ++.Но меня смущает, как написать объявление нативного метода для конструктора.

Скажем, у меня есть класс и конструктор C ++:

 template <class _Tp,class _Val>
  class Arbitrator
  {
  public:
    Arbitrator();
  }

Как мне написать объявление нативного метода?1006 *

Это то, что я делаю до сих пор: пакет hbot.proxy.bwsal.arbitrator;

public class Arbitrator<Tp, Val>
{
    public native Arbitrator Arbitrator();
}

Это то, как я бы сделал это?*

Ответы [ 2 ]

14 голосов
/ 01 октября 2011

Создать нативный метод. Например, private native void init(). Вызовите его из конструктора в Java. В его реализации JNI обращайтесь к классу C ++ по мере необходимости.

Вам все равно придется использовать сгенерированные JNI-сигнатуры методов, поэтому вы не можете напрямую сопоставить класс Java с классом C ++, если вы это хотели.

0 голосов
/ 21 июня 2016

Чтобы вызвать конструктор класса Java из кода JNI на C ++, вам необходимо использовать здесь конструкции JNI.Предполагая, что вы передали ссылку на JVM с JNIEnv в вашей функции C ++ следующим образом:

// Объявление функции

void Java_com_hunter_mcmillen_Arbitrator (JNIEnv *env, jobject thiz) {

// Ссылка на класс Java, в котором есть ваш метод

jclass itemClazz = env->FindClass("com/hunter/mcmillen/myjava/myclasses/Arbitrator");

// Ссылка на метод в вашем классе Java

jmethodID constructor = env->GetMethodID(itemClazz, "<init>", "(Ljava/lang/Object;Ljava/lang/Object)V");

}

И теперь вы можете вызвать функцию конструктора в своем коде C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...