我想从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++ 接口并将其 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;
}
}
文档:使用控制器的跨语言多态性
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)