我的动态 C 库接收一些(指向)结构,其中包括分配的指针(通过 malloc)。被调用的函数被允许调用realloc
它。
typedef struct mystruct {
void * buf;
int buflen;
/* more fields... */
} mystruct;
void myfunc(mystruct *s1, /* more args*/) { /* in dynamic library */
/* .... */
s1->buf = realloc(s1->buf,newsize);
/* .... */
}
我认为带有Memory字段的结构可以解决问题,
public class MyStructJna extends Structure {
public Memory buf;
public Integer buflen;
/* .... */
}
但后来我得到了这个例外:
Exception in thread "main" java.lang.IllegalArgumentException:
Structure field "buf" was declared as class com.sun.jna.Memory,
which is not supported within a Structure
at com.sun.jna.Structure.writeField(Structure.java:792)
任何解释和/或解决方法?我正在使用 JNA 4.0
该问题已得到回答并被接受,但我想补充一点,以防有人尝试类似的方法:
这不是一个好的设计,因为 DLL 端将对 JNA 端分配的指针进行重新分配,最后,JNA 端将尝试释放该指针(在 DLL 端分配)。这通常是不安全的。