我有
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文件的大量变体,就像人们提出的类似问题一样,但它对我不起作用。我想因为在另一个问题中他们使用它作为回报,我必须在我的修改中做错事来把它作为一个论点。
感谢您的评论,谢谢。
答案 0 :(得分:0)
在尝试了一系列不同的解决方案后,效果更好的是%适用,如上面的一条评论所示。
%apply (char *STRING, size_t LENGTH) { (char *modulusBytes, int modulusLength) }
只是要强调的注释是变量的名称必须与声明中使用的名称相同。