【发布时间】:2020-08-24 10:27:28
【问题描述】:
背景
我正在使用 C++ 代码库为 Android 开发一个实时通信应用程序。我使用 SWIG 生成了一个 JNI 桥,以从 Java 访问本机代码。为了跟踪活动呼叫,void* 用作句柄(指向包含有关正在进行的呼叫的信息的地址)。以下函数头是其使用方式的示例:
void initiateCall(void** callHandleRef);
void closeCall(void* callHandle);
initateCall 接受void**,分配一个结构并将其地址(作为 void*)写入callHandleRef。它作为一个“out”参数工作,因为您将它作为参数传递并期望向它写入一些内容。当调用closeCall 时,会传递原始指针,从而允许 C++ 库访问与该特定调用关联的数据。
问题描述
我想从 Java 调用 initiateCall 和 closeCall,使用 SWIG 生成执行此操作所需的 JNI 代码。然而。 SWIG 分别生成类型“SWIGTYPE_p_p_void”和“SWIGTYPE_p_void”,我无法以上述方式使用它们。如何设置我的 SWIG 接口文件以允许我执行此操作?
【问题讨论】:
-
用OUTPUT as name声明参数不够吗?您可能希望为 void 使用类型别名,以便您也可以自动调用析构函数。
-
我认为我对之前问题的回答:stackoverflow.com/questions/12739331/… 和 stackoverflow.com/a/30360180/168175 也应该涵盖您的用例
-
@Flexo 谢谢,您链接的第二个答案对我来说效果很好。
标签: java java-native-interface swig void-pointers