如何使用 SWIG 从 C++ 调用 Java?

Posted

技术标签:

【中文标题】如何使用 SWIG 从 C++ 调用 Java?【英文标题】:How to call Java from C++ using SWIG? 【发布时间】:2010-07-06 21:59:58 【问题描述】:

我可以使用 SWIG 从 Java 调用 C++ 代码,但我找不到任何有关如何执行相反操作的文档(从 C++ 调用 Java)。

官方 SWIG 文档说 (http://www.swig.org/Doc1.3/Java.html#java_overview): “SWIG 使 Java 程序能够轻松地从 Java 调用 C/C++ 代码。从历史上看,SWIG 无法生成任何代码来从 C++ 调用 Java 代码。但是,SWIG 现在支持完全跨语言多态性,并且生成的代码可以调用包装 C++ 虚拟方法时从 C++ 升级到 Java。"

但我找不到它说如何做到这一点!任何帮助是极大的赞赏。谢谢。

【问题讨论】:

【参考方案1】:

实际上这是可能的,我已经基于从 C++ 到 Java 继承一个虚拟类来实现它。

您可以在 SWIG 文档的 Java 部分的“24.5 Cross language polymorphism using directors”一章中找到解决方案。

【讨论】:

【参考方案2】:

根据声明中相当奇怪的措辞,我会说您想要的通常是不可能的。 “......在包装 C++ 虚拟方法时从 C++ 调用到 Java。” “...调用...”使我相信您正在调用继承接口的受保护或公共成员,并且“...包装 C++ 虚拟方法时”使我得出结论,您只能在以下情况下这样做您正在覆盖继承的接口。所以听起来实际用例非常狭窄。

但是,我只是根据您粘贴的文字的措辞来做这件事。它可能对您有帮助,也可能无济于事。

【讨论】:

以上是关于如何使用 SWIG 从 C++ 调用 Java?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 中使用 swig 从 Java 调用 c++ 函数,得到 java.lang.UnsatisfiedLinkError

swig c++ to perl : 如何使用 c++11 字符串 STL 函数

SWIG:如何将 C++ 对象数组从 C# 传递到 C++?

如何使用 SWIG 从 C 调用 C# 方法?

使用 SWIG 包装对象从 C++ 调用 Python 函数的最简洁方法是啥

使用 SWIG (AIX 5.1) 从 Perl 调用 C++ 库时崩溃