1

我正在尝试使用 Eclipse 在 Python 或 Java 中调用一个用 C++ 编写的名为 VFML ( http://www.cs.washington.edu/dm/vfml/ ) 的库。我是 Python 新手,没有用 C 语言编程。是否有任何方法可以做到这一点,不需要 C++ 编程知识,因为学习语言需要时间。任何关于如何做到这一点的教程或指南也会有所帮助。

我使用 Eclipse 来运行 Python 模块和 Java 类。如果有人知道是否可以使用 Java 或 Python 在 Eclipse 中调用 C++ 库,那就太好了。谢谢你。

编辑1:

感谢所有的答案。我误认为 VFML 是用 C++ 编写的。正如所指出的,它是 C 语言。似乎给出的大多数答案都暗示了对 C 语言的某种理解,以便在 Python 甚至 Java 中调用库。我听说过 SWIG。任何想法如果这将是可行的,因为没有任何 C 语言知识我什至不知道我是否能让库正常工作。另一个问题是 SWIG 是否有任何 Eclipse 插件,因为我在 Eclipse 中同时使用 Python 和 Java。

4

2 回答 2

2

要使用 Java 调用 c++ dll 方法,您可以使用 Java Native Access 库。它真的很容易使用。您需要做的就是创建界面并且您可以使用它。

例如,让您拥有带有 dll 的 imageine,GetSystemIp(out char[] ip)此方法的界面将如下所示:

import com.sun.jna.Library;
import com.sun.jna.Native;

public interface DllLibrary extends Library {
    DllLibrary INSTANCE = (DllLibrary)
        Native.loadLibrary(dllPath, DllLibrary.class);
    int GetSystemIp(String ip);

}

你可以这样使用它:

String ip;
int rc = DllLibrary.INSTANCE.GetSystemIp(String ip);

更多信息可以在jna 站点wiki 页面上找到。

于 2013-03-19T07:32:20.090 回答
0

您不能在 Python 或 Java 中直接调用 C++;您必须编写一些桥接代码。鉴于 Python 和 Java 中的外部接口是 C,这个桥接代码可能或多或少复杂:字符串是 char*,这意味着所有的内存管理问题,并且报告错误通常需要调用接口级别来创建目标语言的例外。

Python 的接口代码相当简单,除了这些问题,但它仍然需要相当好的 C++ 知识才能在 Python 对象上有效地使用 RAII。Java 的接口 (JNI) 非常复杂,即使是最简单的操作以及所有常见的资源管理,都需要多次调用 Java。

于 2013-03-19T09:06:33.160 回答