例如,我们有以下结构:
typedef struct Foo
{
unsigned char * data;
} Foo;
我想将data
成员设置为Java字节数组(byte[]
)。我只想要set方法得不到。我已经阅读了getting of a member of type char * to byte array,但我无法进行设置。有人能帮助我吗?
已更新:
我创建了一些类型地图,但我取得了成功:
%typemap(jni) unsigned char * data "jbyteArray"
%typemap(jtype) unsigned char * data "byte[]"
%typemap(jstype) unsigned char * data "byte[]"
%typemap(javaout) unsigned char * data {
return $jnicall;
}
%typemap(out) signed char * data {
$result = JCALL1(NewByteArray, jenv, arg1->contentLength);
JCALL4(SetByteArrayRegion, jenv, $result, 0, arg1->contentLength, $1);
}
%typemap(in) unsigned char *data {
$1 = (unsigned char *)JCALL2(GetByteArrayElements, jenv, $input, 0);
}
%typemap(javain) unsigned char *data "$javainput"
我是否有一些内存泄漏?我做错了还是有更可靠的方式?
答案 0 :(得分:0)
或者我们可以使用JavaCPP代替。这样的事情应该有效:
public static class Foo extends Pointer {
static { Loader.load(); }
public Foo() { allocate(); }
public Foo(Pointer p) { super(p); }
private native void allocate();
public native @MemberSetter void data(@Cast("unsigned char*") BytePointer data);
}
这是IMO更具可读性。