SWIG将const unsigned char example[]包装成Java字节[]作为参数
我有 const unsigned char publickeydmodule[],我希望将其包装为参数,并在java层中作为字节[]获取 c++ 初始化(PublicKeyModules) 爪哇 初始化(字节[]PublicKeyModule) 大口SWIG将const unsigned char example[]包装成Java字节[]作为参数,java,c++,c,swig,Java,C++,C,Swig,我有 const unsigned char publickeydmodule[],我希望将其包装为参数,并在java层中作为字节[]获取 c++ 初始化(PublicKeyModules) 爪哇 初始化(字节[]PublicKeyModule) 大口 %typemap(jni) unsigned char *content "jbyteArray" %typemap(jtype) unsigned char *content "byte[]" %typemap(jstype) unsigned
%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文件的很多变体,就像人们提出的类似问题一样,但它对我不起作用。我猜是因为在另一个问题中,他们用它作为回报,而我在修改中肯定做错了什么,把它作为一个论点
非常感谢您的评论,谢谢。在尝试了一系列不同的解决方案后,效果更好的是上面一条评论中建议的%apply
%apply (char *STRING, size_t LENGTH) { (char *modulusBytes, int modulusLength) }
需要强调的一点是,变量的名称必须与声明中使用的名称相同。您是否尝试过使用中所述的
%apply
?是的,我尝试过apply,它可以返回我想要的。但它会在cxx文件中生成GetByteArrayElements,使我的应用程序崩溃。