我正在尝试使用Eclipse在Python或Java中调用一个用C++编写的名为VFML (http://www.cs.washington.edu/dm/vfml/)的库。我是Python的新手,也没有用C语言编程。有没有什么方法可以做到这一点,而不需要C++编程的知识,因为这将需要时间来学习语言。任何关于如何做到这一点的教程或指南也会有所帮助。
我使用Eclipse来运行Python模块和Java类。如果有人知道是否可以使用Java或C++调用Eclipse中的Python库,那就太好了。谢谢。
编辑1:
谢谢你所有的答案。我搞错了VFML是用C++写的。正如所指出的,它是C语言。似乎给出的大多数答案都表明您对C语言有一定的了解,以便在Python甚至Java中调用这些库。我听说过SWIG。任何想法,如果这将是可行的,因为没有任何C语言的知识,我甚至不知道我是否可以让库正常工作。另一个问题是,当我在Eclipse中使用Python和Java时,是否有任何用于SWIG的Eclipse插件。
发布于 2013-03-19 17:06:33
您不能在Python语言或Java语言中直接调用C++;您必须编写一些桥接代码。考虑到Python和Java的外部接口是C语言,这种桥接代码可能或多或少比较复杂:字符串是char*,所有的内存管理问题都暗示了这一点,而且报告错误通常需要调用接口级别来在目标语言中创建异常。
除了这些问题之外,Python的接口代码相当简单,但它仍然需要相当好的C++知识才能在Python对象上有效地使用RAII。Java接口(JNI)异常复杂,需要大量的Java回调才能执行最简单的操作,以及所有常见的资源管理。
发布于 2013-03-19 15:32:20
要使用c++调用Java方法,可以使用Java Native Access库。它真的很容易使用。你所需要做的就是创建接口,然后你就可以使用它了。
例如,假设你用GetSystemIp(out char[] ip)获得了dll,这个方法的接口将如下所示:
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 site和wiki page上找到。
https://stackoverflow.com/questions/15493707
复制相似问题