首页 > 解决方案 > 如何在 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;

这可能吗?

标签: pointersjna

解决方案


推荐阅读