[英]Is it possible to implement a Java Interface in C or C++ using JNI?
假设一个包含类的Java库,我们称之为Foo
。 该类包含一个构造函数和两个方法:
// constructor
Foo();
// returns a random int
public int bar();
// generates a random int "x" and calls integerGenerated(x)
public void generateInt(IntGeneratorListenerInterface listenerInterface);
这假定Java接口IntGeneratorListenerInterface
有一个方法:
void integerGenerated(int generatedInt);
我可以从本地C和C ++调用bar()
。 这是一个C ++示例,假设正确初始化JNIEnv
env
:
// instantiate Foo
jclass fooClass = env->FindClass("com/my/package/Foo");
jmethodID constructorMethodID = env->GetMethodID(fooClass, "<init>", "()V");
jobject fooInstance = env->NewObject(fooClass, constructorMethodID);
// call bar()
jmethodID barMethodID = env->GetMethodID(fooClass, "bar", "()I");
jint result = env->CallIntMethod(fooInstance, barMethodID);
printf("%d", result);
我想要做的是从C / C ++实现接口IntGeneratorInterface
,这样当我使用类似的JNI调用调用generateInt()
,我可以在C中接收回调,如:
void integerGenerated(int x)
{
// do something with the int
}
我的问题:有没有办法在C / C ++中实现Java接口,这样我可以将有效的东西传递给generateInt()
,并在C中调用integerGenerated()
?
我查看了JNI的RegisterNatives()
,但我相信这需要Java代码声明并调用“本机”方法(如果我错了请纠正我),而且我没有修改现有Java的奢侈图书馆。 另请注意,这里使用简单的Java库来举例说明我的问题。 我意识到这样简单的功能可以像原生一样轻松编写。
是。 就像使用任何其他本机方法一样:
class NativeRunnable implements Runnable {
@Override
public native void run();
}
现在只需使用javah
创建头文件并实现该功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.