SWIG将const unsigned char example []包装为Java byte []作为参数

时间:2014-05-27 09:33:22

标签: java c++ c swig

我有

const unsigned char publicKeyModulus [],我想把它包装成一个参数,并在我的java层中得到一个byte []。

C ++ onInitialize(publicKeyModulus)

爪哇 onInitialize(byte [] publicKeyModulus)

SWIG.i

%typemap(jni) unsigned char *content "jbyteArray"
%typemap(jtype) unsigned char *content "byte[]"
%typemap(jstype) unsigned char *content "byte[]"
%typemap(javain) unsigned char *content {}

%typemap(in) unsigned char * content {
    $result = JCALL1(NewByteArray, jenv, arg1->contentLength);
    JCALL4(SetByteArrayRegion, jenv, $result, 0, arg1->contentLength, $1);
}

// Optional: ignore contentLength;
%ignore contentLength;

%inline %{
typedef struct {
    unsigned char * content;
    int contentLength;
} Foo;
%}

我一直在尝试这种swig文件的大量变体,就像人们提出的类似问题一样,但它对我不起作用。我想因为在另一个问题中他们使用它作为回报,我必须在我的修改中做错事来把它作为一个论点。

感谢您的评论,谢谢。

1 个答案:

答案 0 :(得分:0)

在尝试了一系列不同的解决方案后,效果更好的是%适用,如上面的一条评论所示。

%apply (char *STRING, size_t LENGTH) { (char *modulusBytes, int modulusLength) }

只是要强调的注释是变量的名称必须与声明中使用的名称相同。