繁体   English   中英

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

[英]How to pass java function pointer to c++ native code

我想从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知道第3个param(实际上是一个类)并将其转换为c ++中的函数指针(包含'myFunction')?
如果不可能,是否有另一种方法将函数指针从java传递给c ++?

您可以编写C ++接口并将其作为“导演”类进行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;
    }
}

文档: 使用director的跨语言多态性

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM