如何将 java 函数指针传递给 c++ 本机代码

How to pass java function pointer to c++ native code

本文关键字:c++ 本机代码 指针 java 函数      更新时间:2023-10-16

我想从java(android)代码中调用一个原生的c++方法,并将java函数作为参数传递,这样我就可以将函数指针保存在c++代码中,并从原生代码中激活它。

选择使用匿名类在 java 中实现函数指针,我从 java 调用本机函数,如下所示:

interface FunctionPtrHelper {
bool function(String param);

}

NativeFunc(param1,param2,new FunctionPtrHelper() {
public bool myFunction(String param) {
    //body of my function
}});

如何让 swig/jni 知道第三个参数(实际上是一个类)并将其转换为 c++ 中的函数指针(将包含"myFunction")?
如果不可能,有没有另一种方法可以将函数指针从 java 传递到 c++?

你可以编写一个C++接口,并将其作为"director"类进行SWIG。 然后,您可以在 Java 中实现该接口。 在 Java 中实例化实现对象并将其传递到一个 C++ 方法中,该方法采用指向接口的指针或引用,C++将能够回调到 Java 类中。 例如:

// SWIGed C++
class IStringToBool
{
public:
    virtual bool call(std::string s) = 0;
}
class IStringToBoolUser
{
public:
    void setFunction(IStringToBool &function);
}

然后:

// Java
public class MyFunction implements IStringToBool {
    public bool call(String s) {
        // do something
        return true;
    }
}

文档:使用控制器的跨语言多态性

使用 JNI,您可以将对象传递给C++,然后您可以从C++对象获取函数指针。