在JNI中将回调函数实现为接口,并将引用保存在函数指针中

时间:2018-11-08 14:32:21

标签: java c++ callback java-native-interface function-pointers

所以基本上我在C ++端有这样的结构:

typedef int(*callback)(int, int);
typedef struct InfoCallback {
    int a;
    int b;
    callback call;
} InfoCallback_t;

我非常喜欢在Java端用JNI(甚至SWIG来填充此结构,但这要难得多吗?)。我知道我应该在Java端使用interface作为回调功能,但是我无法将其束之高阁。

在Java方面,我想要一个函数

private native void fillAndPrintStructCallback(int a, int b, Callback callback);

我认为我的界面应该看起来像

public interface Callback {
    int onCallback(int a, int b);
}

JNI函数主体应至少看起来像这样

  InfoCallback_t *info = new InfoCallback_t;
  info->a = a;
  info->b = b;
  // can't come up how can I store the reference here to the passed implementation of the Callback
  info->call = ???;
  delete info;

我知道如何传递基元,但是我想不出一种方法,该如何在C ++端存储对Java回调的引用。我该如何实现?

0 个答案:

没有答案