java - 如何将 java 函数指针传递给 C++ native 代码

标签 java c++ callback java-native-interface swig

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

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

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++ 接口(interface)并将其作为“director”类 SWIG。然后就可以用Java实现接口(interface)了。在 Java 中实例化实现对象并将其传递给采用指针或对接口(interface)的引用的 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;
    }
}

文档:Cross language polymorphism using directors

关于java - 如何将 java 函数指针传递给 C++ native 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13476429/

相关文章:

java - Java 中是否有适合用作离散事件模拟中的 'simulation clock' 的类?

reactjs - History.push 在获取回调中不起作用

javascript - Node.js + Express - 在完成之前返回未定义的回调

java - 从 Java 6 到 Java 7 有 JDiff 吗?

java - getLifecycle().getState() 在 onStart() 之后仍然是 CREATED

c++ - 释放 lpsolve 内存

c++ - 铛AST转储不显示一些全局变量

javascript - Jquery jsonp请求回调函数未触发

java - Jrebel 在 Eclipse 中用于 Hotswap 或 HotDeployment 的替代方案

c++ - 多次调用后 LoadBitmap 失败