如何从Visual C++调用jar文件中的方法?

问题描述:

在我的项目中,我需要使用VC++调用Jar文件中的方法。有没有办法从VC++调用jar文件中的方法。如果示例代码在那里,那么它会有很大的帮助。如何从Visual C++调用jar文件中的方法?

在此先感谢! 阿伦

+1

为您想要尝试的场景添加更好的描述。所以你向其他人展示了你对这个问题的想法。你还想让C++在Jar(类似于zip)文件中调用一个方法吗?这是没有意义的。 – 2011-03-24 05:38:36

+3

@C约翰逊:这个问题确实有道理。有时候你需要使用Java库的功能,而且你更愿意在.Net中编写代码,因为这就是你所知道的。在编写与供应商SOAP接口连接的应用程序时,我遇到了同样的问题。供应商为界面提供一个客户端库作为Jar文件。我不是从头开始重写客户端,而是使用'ikvmc'将它翻译成.Net并在C#中构建我的应用程序。 – 2011-03-24 05:49:23

IKVM.Net(http://www.ikvm.net)是一个.NET实现的Java库,这是不是真的,你想要的东西,但它包括一个名为ikvmc(见http://sourceforge.net/apps/mediawiki/ikvm/index.php?title=Ikvmc)一个命令行工具,这将翻译Java字节 - 编码为.Net IL代码,并生成一个.Net程序集DLL。我已经成功地使用它将Java库转换为一个程序集,然后将它包含在C#项目中。

如果您使用C++作为目标语言,那么您必须使用JNI(http://java.sun.com/docs/books/jni/)。 JNI定义了一个接口来交换数据并从/到Java和本地代码调用方法。将一个JNI包装器写入一个包含方法返回并接受输入简单参数(即本机类型,不收集,不包含数组)的类是非常简单的。当方法涉及类,集合,数组等等时,手动编写JNI包装会变得很麻烦。本文提供了一个很好的概述:http://java.sys-con.com/node/45840。在这种情况下,您可以评估封装发生器,如GIWS:http://www.scilab.org/products/other/giws

如果您使用.NET环境作为您的目标平台,那么IKVM是一种选择。然而,当我们不得不为一个真正的项目做到这一点时,我们更喜欢JNBridge,并且我们使用这个(商业)工具取得了很大的成功。我们没有评估IKVM出于商业原因:我们的客户只需要正式支持的中间件。

+0

对!使用GIWS。用JNI手工写这个是一场噩梦! (有太多的函数调用检查,内存被释放等) – Sylvestre 2013-02-20 22:55:35