Pointers 如何在JNA中分配导出的全局指针数组

Pointers 如何在JNA中分配导出的全局指针数组,pointers,jna,Pointers,Jna,我想使用JNA将Java中的指针数组分配给本机库中结构的“导出的全局”指针数组 我现在有一个解决方法,我创建了一个API函数,它接受指向结构的指针,然后以本机方式进行赋值。这种变通方法是可以接受的,因为我可以访问本机源代码 在C中,全局变量: SM_t** SM_REFS; 我在JNA中导入库: static Pointer SM_REFS = lib.getGlobalVariableAddress("SM_REFS"); 大体上,我尝试将指针指定为: SM2.SM_REFS.setPoi

我想使用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;

这可能吗?

似乎
**
是指向指针的指针。是否确实不需要
指针引用
?谁在为所指向的数组执行内存管理?您的C代码已在某个位置为该数组分配了内存,并且您的**指针指向指向该数组开头的指针。当您尝试用另一个指针覆盖该指针时,您没有为新指针位置指向的位置分配任何内存。我想我发现了两个问题。1) 当您在JNA中有一个结构并且想要使用一个指向数据的“显式”指针时(在我的例子中,因为我想要分配全局),您必须首先使用write()方法。所以我必须做BB.SM.write();早些时候。注意:如果我在函数调用中使用该结构,JNA会为我这样做。2) 这只给了我一个*来提供,但我有**,所以设置导出的全局SM_REFS**的总调用将是“SM2.SM_REFS.getPointer(0.setPointer(0,BB.SM.getPointer())”。其中,间接寻址需要第一个“getPointer(0)”。