【问题标题】:Swig+Java: namespaces and packagesSwig+Java:命名空间和包
【发布时间】:2015-06-22 04:40:18
【问题描述】:

假设 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::BMainNS::B::Class(包MainNS.B)无法访问<modulename>JNI 类。

这个问题的解决方案是什么?据我了解,没有 SWIG 选项可以将生成的 JNI 类与本机函数签名分开?

【问题讨论】:

    标签: java c++ namespaces packages swig


    【解决方案1】:

    这是一个相当古老的线程,但是因为我遇到了类似的问题:

    我解决这个问题的方法是创建两个不同的模块,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>
    

    链接:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 2021-08-09
      • 2014-01-15
      • 1970-01-01
      相关资源
      最近更新 更多