JNI C ++回调

时间:2013-10-13 12:58:44

标签: java-native-interface

我有一个c ++函数,它接受一个lambda作为参数。这个函数调用一段java代码。

我想知道一旦完成,我将如何让java代码调用lambda,实际上是回调C ++代码。

2 个答案:

答案 0 :(得分:1)

JavaCPP这样做。例如,C ++中的以下代码:

#include "jniFoo.h"

int main() {
    JavaCPP_init(0, NULL);
    foo(6, 7);
}

使用这个Java类:

import com.googlecode.javacpp.*;
import com.googlecode.javacpp.annotation.*;

public class Foo {
    public static class Callback extends FunctionPointer {   
        public @Name("foo") void call(int a, int b) { 
            System.out.println("bar " + a * b);
        }
    }
}

产生以下输出:

bar 42

答案 1 :(得分:0)

Java不懂C ++或lambdas。您应该准备一个通用的C回调,它将知道要执行哪个lambda。