如何将 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 知道第三个参数(实际上是一个类)并将其转换为 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++对象获取函数指针。
相关文章:
- 在nodejs中使用本机代码的最佳方法是什么?
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- 可以从本机代码(如C++/Delphi)中使用.netCore DLL
- 使用 x86_64-w64-mingw32-g++ 编译 JNI C++本机代码
- 终止调用本机代码的 .Net 线程
- 从本机代码返回到托管代码会损坏返回的对象
- 我能否通过 JNI 调试在本机代码中创建的 JVM?
- Android 无法从本机代码调用 Java 方法 JNI
- 将自定义 Java 数据模型传递给我的本机代码
- 用于 JUnit 测试的本机代码未使用 'nar-maven-plugin' 编译
- 将本机C 代码转换为Java
- 有什么方法可以用本机C 代码替换Windows API计时器(settimer)
- 使用 Android Studio 使用本机代码编译 apk 时,如何在链接处删除 libgnustl_static.
- 如何在 Linux 上调试本机代码时自动附加到多个子进程
- 如何将 WebAssembly 编译成常规汇编/本机代码(或 Cpp 等)
- Android- AAR库的调试本机代码
- 附加到 C++/CLI dll 的性能探查器无法访问本机C++代码
- AccessViolationException从托管C (ASP.NET的包装器)调用本机C 代码
- Excel 2016 VSTO 加载项与本机代码 DLL
- 从本机代码返回"const char*"并在java中获取"字符串"