SWIG将c ++字符串包装到java中的byte []中

时间:2014-05-28 15:10:52

标签: java c++ swig

swig.i

%typemap(jtype) bool foo "byte[]"
%typemap(jstype) bool foo "byte[]"
%typemap(jni) bool foo "jbyteArray"
%typemap(javaout) bool foo { return $jnicall; }
%typemap(in, numinputs=0) std::string& out (std::string temp) "$1=&temp;"
%typemap(argout) std::string& out {
  $result = JCALL1(NewByteArray, jenv, $1->size());
  JCALL4(SetByteArrayRegion, jenv, $result, 0, $1->size(), (const jbyte*)$1->c_str());
}
// Optional: return NULL if the function returned false
%typemap(out) bool foo ""

%inline %{
struct Bar {
  bool foo(std::string& out) {
    std::string s;
    s.push_back('H');
    s.push_back('o');
    s.push_back(0);
    s.push_back('l');
    s.push_back('a');
    out = s;
    return true;
  }
};
%}

爪哇

public byte[] foo() { return NativeISecurityProviderJNI.Bar_foo(swigCPtr, this); }

直到这里一切都很好,但我想要得到的是这个java返回(byte [])作为参数。 喜欢

public void foo(byte[] example) {}

为了达到这个目的,我尝试了很多可能的修改,但没有办法,我已经没想象了。 我会很感激任何建议。非常感谢你。

1 个答案:

答案 0 :(得分:0)

Correct way to interact with arrays using SWIG处的技术可能适用。该技术记录在24.8.5 Binary data vs Strings