В настоящее время я пишу оболочку JNI для класса C ++, и я не уверен, что то, что я сделал до сих пор, является наиболее правильным способом.
Насколько я понимаю, невозможно объявитьJava-конструктор native
, поэтому я написал что-то вроде:
package log;
public class Logger
{
private long internalPtr = 0;
private native long createNativeInstance(String application, String module, String function);
public Logger(String application, String module, String function)
{
this.internalPtr = createNativeInstance(application, module, function);
}
public native String getApplication();
static { System.loadLibrary("log_java"); }
}
По сути, мое поле internalPtr
содержит указатель на мой базовый экземпляр C ++, и я создаю его в чистом Java-конструкторе, используяstatic native
метод createNativeInstance()
.
Это правильный способ сделать что-то?
Другой вопрос, на который я мог бы получить ответ: «Как мне справиться с освобождением?»
Мои навыки Java чрезвычайно ограничены, поэтому не стесняйтесь предлагать даже более "очевидные" решения.
Большое спасибо.