swig 2 маршалинг в стандартный формат& от Java до C ++ - PullRequest
0 голосов
/ 01 марта 2019

Вот что у меня есть:

%module FacadeInterface

%{
#include <Facade.h>
#include <boost/filesystem/path.hpp>
%}

%typemap(jni) boost::filesystem::path "jstring"
%typemap(jstype) boost::filesystem::path "java.io.File"
%typemap(jtype) boost::filesystem::path "String"
%typemap(javain) boost::filesystem::path "$javainput.toString()"
%typemap(in) boost::filesystem::path (boost::filesystem::path tmp) {
  const char *str = JCALL2(GetStringUTFChars, jenv, $input, 0);
  tmp = str;
  $1 = &tmp;
  JCALL2(ReleaseStringUTFChars, jenv, $input, str);
}

%include "Facade.h"

%include <std_vector.i>
%template(PathsVector) std::vector<boost::filesystem::path>;

Вот содержимое Facade.h

bool run(const std::vector<boost::filesystem::path> &plyFiles);

При компиляции исходного кода Java я получаю следующую ошибку:

/root/build/src/main/com/facade/PathsVector.java:71: error: incompatible types: String cannot be converted to long
    return new SWIGTYPE_p_boost__filesystem__path(FacadeInterfaceJNI.PathsVector_get(swigCPtr, this, i), false);
...