假设C ++类结构如下:
namespace MainNS
{
namespace A
{
class Class
{
//...
};
}
namespace B
{
class Class
{
//...
};
}
//...
}
我已按照此SWIG文档:http://www.swig.org/Doc3.0/Java.html#Java_namespaces
在接口文件中,我定义了以下内容以在Java端创建包:
%nspace MainNS::A::Class
%nspace MainNS::B::Class
然后必须使用java
pragma将JNI文件放入“适当的”位置(类可以访问它的地方 - 这是问题的核心,请参见下文):
%pragma(java) jniclasspackage = "MainNS::A" //or "MainNS::B"
现在,来自班级MainNS::A::Class
(包MainNS.A
)的所有人都可以访问生成的<modulename>JNI
班级。
但是,名称空间B
最终位于不同的包MainNS::B
中,而MainNS::B::Class
(包MainNS.B
)无法访问<modulename>JNI
类。
这个问题的解决方案是什么?据我所知,没有SWIG选项将生成的JNI类与本机函数签名分开?
答案 0 :(得分:0)
这是一个很老的话题,但是由于我遇到了类似的问题:
我要解决的方法是创建两个不同的模块A和B(以及两个不同的Swig接口文件A.i和B.i)。您可以导入每个文件(使用%import而不是%include)
%module A
%{
#include <MainNS/A.hxx>
%}
%feature(nspace);
%pragma(java) jniclasspackage="MainNS.A";
%import "B.i"
%include <MainNS/A.hxx>
然后B.i:
%module B
%{
#include <MainNS/B.hxx>
%}
%feature(nspace);
%pragma(java) jniclasspackage="MainNS.B";
%import "A.i"
%include <MainNS/B.hxx>
链接: