gpt4 book ai didi

java - 使用 SWIG 使用 Java 字节数组设置类型为 char * 的 C 结构的成员

转载 作者:行者123 更新时间:2023-11-29 09:09:29 24 4
gpt4 key购买 nike

例如我们有以下结构:

typedef struct Foo
{
unsigned char * data;
} Foo;

我想用 Java 字节数组 (byte[]) 设置 data 成员。我只想设置方法不获取。我读过 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"

我有内存泄漏吗?是我弄错了还是有更可靠的方法?

最佳答案

或者我们可以用 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 中更具可读性。

关于java - 使用 SWIG 使用 Java 字节数组设置类型为 char * 的 C 结构的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13153380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com