[英]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.