Я новичок в Swig и прочитал документацию, но все еще не могу.
В заголовке моей библиотеки есть следующий класс:
class Facade
{
public:
static bool Init(const boost::filesystem::path &path);
};
Я пытаюсь получить еготак что пользователи могут передавать java.nio.file.Path
из кода Java через слой JNI, созданный swig.Вот мой файл определения swig:
%module FacadeInterface
%{
#include "Facade.h"
#include <boost/filesystem/path.hpp>
%}
%pragma(java) jniclassimports=%{
import java.nio.file.Path;
%}
%pragma(java) moduleimports=%{
import java.nio.file.Path;
%}
%typemap(jstype) boost::filesystem::path & "java.nio.file.Path"
%typemap(jstype) boost::filesystem::path "java.nio.file.Path"
%typemap(jtype) boost::filesystem::path & "java.nio.file.Path"
%typemap(jtype) boost::filesystem::path "java.nio.file.Path"
%typemap(jni) boost::filesystem::path & "jobject"
%typemap(jni) boost::filesystem::path "jobject"
%typemap(in) boost::filesystem::path {...}
%typemap(in) boost::filesystem::path & {...}
%typemap(out) boost::filesystem::path {...}
%typemap(out) boost::filesystem::path & {...}
%include "Facade.h"
Это только частично работает в том смысле, что код Java создает интерфейс, который принимает java.nio.file.Path
, но затем пытается преобразовать его в SWIGTYPE_p_boost__filesystem__path
.Например, сгенерированный код выглядит как.
public class Facade {
...
public static boolean Init(java.nio.file.Path path) {
return FacadeInterfaceJNI.Facade_Init(
SWIGTYPE_p_boost__filesystem__path.getCPtr(path));
}
...
}
Что мне нужно сделать, чтобы получить java.nio.file.Path
, преобразуемый в boost::filesystem::path
.
Мои ошибки компилятора Java следующие:
/root/build/src/main/com/Facade.java:39: error: incompatible types: Path cannot be converted to SWIGTYPE_p_boost__filesystem__path
return FacadeInterfaceJNI.Facade_Init(SWIGTYPE_p_boost__filesystem__path.getCPtr(modelPath));