【发布时间】:2015-08-19 14:42:16
【问题描述】:
我有一个 C 函数,它需要一个包含非常量字符串的结构。
typedef struct _A {
char* str;
} A;
void myFunc(A* aptr) { ... }
我已经尝试了很长时间通过 JNA 传递这个东西,但到目前为止没有成功。
public class A extends Structure {
public String str;
protected List getFieldOrder() { ...
}
不起作用,因为 String 将被转换为 const char* 而不是我需要的 char*。
public class A extends Structure {
public byte[] str;
protected List getFieldOrder() { ...
}
不起作用,因为结构内的字节数组变成了连续的内存而不是指针。
我知道我可以通过使用Memory 并复制字符串来做到这一点。但我无法想象这是首选的方法。
我也尝试过类似的东西
public class NonConstStringMember extends Structure {
public static class ByReference extends NonConstStringMember implements Structure.ByReference {}
public byte[] stringMember;
protected List getFieldOrder() { ...
}
public class A extends Structure {
public NonConstStringMember.ByReference str;
}
但它也不起作用,可能是因为对齐问题。
使用 JNA 执行此操作的首选方法是什么?
【问题讨论】:
标签: string struct constants jna