当前位置: 首页 > 知识库问答 >
问题:

SWIG——如何忽略我不需要公开的C类(在Java中)?

杨起运
2023-03-14

考虑一个SomeClass。h声明了以下功能

void doSomethingSimple(double);
void dealWithComplexClasses(ComplexClass&);

我想在Java中公开dosomething thingSimple(double),但不在ComplexClass(ComplexClass

我尝试了各种方法,例如:

%ignore SomeClass::dealWithComplexClasses(ComplexClass&);
%ignore SomeClass::dealWithComplexClasses;

我还发现这个问题得到了回答,但对我没有帮助(虽然问题很相似,所以我肯定遗漏了一些东西),但最后Swig总是为ComplexClass创建一个代理java类,并且在SomeClass中有一个DealwithComplexClass(SWIGTYPE_p_ComplexClass)。java

我怎么能告诉Swig只为我想在Java中公开的内容生成代码?或者忽略我不想公开的函数和类?


共有2个答案

戚泰
2023-03-14

您可以直接在C代码中使用预处理工具:

void doSomethingSimple(double);
#ifndef SWIGJAVA
void dealWithComplexClasses(ComplexClass&);
#endif

见:http://www.swig.org/Doc1.3/Preprocessor.html#Preprocessor_condition_compilation

公冶弘壮
2023-03-14

你做得对。%ignore SomeClass::dealwithcomplexclass应该可以工作,所以我怀疑您在同时尝试其他事情,并将错误解释为这不起作用的指示。尝试:

%ignore ComplexClass; // will not wrap ComplexClass
%ignore SomeClass::dealWithComplexClasses; // do not wrap that method or any of its overloads

另一种可能性,但不能从您的帖子中判断,是您的类在一个命名空间中。在这种情况下,您需要前置命名空间。

如果它仍然不起作用,需要更多信息,为此发布最小的. i和. h。

 类似资料:
  • 问题内容: 我写了下面的代码 因此,当我运行它时,它可以正常运行并打印输出“ Hello”。 但是,如果JVM规范要求该main方法应该是公开的,因为“否则它就看不到main”,那么它也不适用于该类吗?如果JVM在未声明为public时“看不到” Hello.main(),它将如何看到类A本身。 除了“因为规范这样说”以外,对此还有什么解释吗? 并且,如果JVM能够看到所有类和方法,因为它本身就是

  • 问题内容: 我正在尝试为api 编写Web服务。因此,我编写了一个MyLogRecord类,该类继承自LogRecord。我用JAX- B注释对此类进行了注释,包括,因此它将忽略未注释的字段和属性。当我启动tomcat时,出现错误,并且其他类没有默认的构造函数,但是没有带注释的方法对Level类或任何其他类进行任何引用。这些由父类引用。 我的子类具有需要定义的所有内容。如何使JAX-B完全忽略父类

  • 本文向大家介绍发布一个npm包如何忽略不需要发布的文件?相关面试题,主要包含被问及发布一个npm包如何忽略不需要发布的文件?时的应答技巧和注意事项,需要的朋友参考一下 中的文件不会被发布

  • 问题内容: 我有以下代码: 我想执行:即使(上面的行)抛出异常。除了: 我连续有很多test.setSomething,它们都可能引发异常。如果他们这样做,我只想跳过这一行,移至下一行。 为了澄清起见,我不在乎它是否引发异常,并且我无法编辑引发此异常的代码的源代码。 这是我不关心例外的情况(请不要使用通用量化的语句,例如“您永远不要忽略异常”)。我正在设置某些对象的值。当我向用户提供值时,无论如何

  • 问题内容: 我正在编写一个使用Oracle JDBC驱动程序的Java程序。我已经在我的类路径中设置了它。当我在IDE中运行程序(作为jdbc作为库添加)时,程序运行正常。当我尝试部署它时,它完全忽略了classpath中的清单,并给了我一个NoClassDefFoundError。 我想使用客户端的JDBC驱动程序(已安装的JDBC驱动程序),并且不提供自己的驱动程序。我打包了来自JDevelo

  • 我编写了我的第一个ArchUnit测试: 这个项目是用Maven构建的,所以类在不同的目录中。 将名称以“tests”或其他东西结尾的类分开是不够的,因为有许多类不是测试,而是只存在于测试类路径中。