pointers - 如何在 JNA 中分配导出的全局指针数组
问题描述
我想使用 JNA 将 Java 中的指针数组分配给指向本机库中结构的“导出的全局”指针数组。
我现在有一个解决方法,我创建了一个 API 函数,该函数接受一个指向结构的指针,然后本机进行分配。这种解决方法是唯一可以接受的,因为我可以访问本机源代码。
在 C 中,全局变量:
SM_t** SM_REFS;
我在 JNA 中导入库:
static Pointer SM_REFS = lib.getGlobalVariableAddress("SM_REFS");
我主要尝试将指针分配为:
SM2.SM_REFS.setPointer(0, BB.SM.getPointer()); // this will crash
我应该如何在 Java 端执行此操作?
我的解决方法是导出本机函数并使用 JNA 传递结构。
SM2.INSTANCE.SET_SM_REFS( BB.SM, 0);
这是有效的,因为在 C 端我有:
int SET_SM_REFS(SM_t* thisSM, int index){
SM_REFS[index] = thisSM;
return 1;
}
我想在 Java 端做这件事,就像在 C 中做的一样。像
SM_REFS[0] = &BB;
这可能吗?
解决方案
推荐阅读
- java - MediaStore.Images.Media.insertImage 已被贬低
- sql - Oracle 项目上的空白和孤岛,然后在产品级别对日期进行排序
- python - python-docx 和自定义项目符号样式
- r - 在R中的数据框中找到最小值
- javascript - 在 Javascript 中拆分时,如何忽略两个已知字符串之间的可变字符串长度?
- c++ - 记录器系统 - 使用级别 c++
- c# - 如何在 Azure.Messaging.ServiceBus 中克隆消息,版本 = 7.1.2.0
- google-analytics - 计算每个事件在谷歌数据工作室中每个会话发生的平均次数
- python - python:python3中的~运算符功能是什么
- azure - 我们可以从 Azure Web PubSub 获取对话历史记录吗