日期:2014-05-18  浏览次数:20921 次

C#调用java工程,或c/C++调用java工程
在C#窗体程序有一个按钮,我希望点击这个按钮可以调用一个java写的项目(名称为javaProject,它是一个web项目,我单独调用了后台代码),这个java项目返回一个字符串,我要在C#中得到这个返回值。
由于java项目里面包含大量的jar(多数是spring,hibernate的jar),所以使用ikvm将java类库转为.net类库难以实现。
我现在是将java项目打包成jar,写一个java类(diao_java.class)调用这个java项目的接口函数(在diao_java.class中引用了java工程打包成的jar,javaProject.jar),然后用c调用这个java函数(diao_java.class),做出c写的dll,c#调用这个C写的dll,可是目前这个接口函数返回值是null(不知道是不是由于有大量xml配置文件,找不到相应的类?)
不知道各位知道为什么接口函数的返回值是空的嘛?大家还有没有其他的解决方法呢?
不过不可以使用webservice。谢谢各位了~~~

------解决方案--------------------
在C#中调用 java的函数:
一、简要步骤:
首先,编写 java代码,并用java编译工具编译生成jar或class;
然后,使用 ikvmc 将jar或class文件编译成DLL文件;
最后,建立C#工程,调用DLL。
二、准备工作:
1、 到IKVM官方网站(http://www.ikvm.net/)下载IKVM需要的组件:
(实际下载的网址是:http://sourceforge.net/projects/ikvm/files/)
File/Folder Name

Size

Date

Downloads

openjdk6-b12-stripped.zip

30.8 MiB

Fri Jun 05 2009 16:20

1,338

ikvmbin-0.40.0.1.zip

11.8 MiB

Fri Jun 05 2009 13:29

2,966

ikvm-0.40.0.1.zip

15.3 MiB

Fri Jun 05 2009 13:27

2,246

 
2、 到mono官方网站(http://www.go-mono.com/mono-downloads/download.html)下载:
mono-2.4.2.3-gtksharp-2.12.9-win32-3.exe。该文件较大,有70多M。下载该文件的主要目的是提取其中的IKVM.OpenJDK.ClassLibrary.dll,该文件有30M。(当然也可以在Google上搜索下载。)
3、解压ikvm-0.40.0.1.zip,然后将其中的bin目录的全路径添加到Path环境变量中;
4、安装mono-2.4.2.3-gtksharp-2.12.9-win32-3.exe,然后在其路径下找到IKVM.OpenJDK.ClassLibrary.dll,默认是:C:/Program Files/Mono-2.4.2.3/lib/mono/ikvm;
5、将在第3、4步中找到的以下四个DLL拷出存放,目的是便于C#工程引用:
IKVM.OpenJDK.ClassLibrary.dll
IKVM.OpenJDK.Core.dll
IKVM.Runtime.dll
IKVM.Runtime.JNI.dll
准备工作完毕。
三、测试实例:(很简单的代码)
1、 建立一文本文件:demo.java,输入代码如下:
package test;
public class demo
{
public String Message = "Hello from Java!";//java 属性
public String Function() //java 方法
{
String str1="Test ";
String str2="OK!";
return str1+str2;
}
}
2、进入CMD,cd到demo.java所在路径:
先执行:javac demo.java
再执行:ikvmc demo.class
至此,应该已经生成 demo.dll 文件了。
2、 新建C#的Form程序,在“解决方案”--“引用”中添加demo.dll和上面所提到的四个IKVM的dll;
3、 在按钮的响应事件中添加如下代码:
private void button1_Click(object sender, EventArgs e)
{
test.demo td = new test.demo();
MessageBox.Show(td.Message);
MessageBox.Show(td.Function());//调用java的方法
}
 4、编译,运行,OK。
------解决方案--------------------
java调用c#就知道