必備程序:jacob,下載地址爲:jacobBin_17.zip
一、使用vs2008或者vs2010新建一個Windows類庫程序,項目名稱就叫InvokeCSharp,再新建一個類:ExampleClass,具體代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace InvokeCSharp
{
/// <summary>
/// GUID自動生成就好了
/// </summary>
[Guid("C41D14FD-F719-41fc-94CD-4B64D19F44B0")]
public interface IExampleClass
{
/// <summary>
/// [DispId(1)]爲方法的COM調度標識符,如果有多個方法可相應的在每個方法前面加[DispId(2)], [DispId(3)]
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
[DispId(1)]
string HelloJava(string name);
}
[Guid("70FE7452-0D4B-4717-8352-FEB0F6E830C1"),
ClassInterface(ClassInterfaceType.None)]
public class ExampleClass : IExampleClass
{
public ExampleClass() { }
public string HelloJava(string name)
{
return "你好,Java傳遞過來的參數爲:" + name;
}
}
}
需要注意的是編譯前的配置步驟,主要有以下幾步:
1、解決方案資源管理器中右鍵點擊項目名稱“InvokeCSharp”,選擇屬性
2、在“應用程序”頁籤中,點擊“程序集信息”按鈕,在彈出的對話框中勾上最後一個複選框“使程序集COM可見”
3、在“生成”頁籤中,勾上最後一個複選框“爲COM互操作註冊”
4、生成“InvokeCSharp”項目
5、在項目的Debug/bin文件夾下會有這樣幾個文件:一個是InvokeCSharp.dll,另一個是InvokeCSharp.tlb,這個就是我們要的COM程序
6、最後,註冊COM,打開“Visual Studio 命令提示”,進入InvokeCSharp項目的Debug/bin文件夾,運行“regasm InvokeCSharp.dll /tlb:InvokeCSharp.tlb”,這樣就註冊了COM,regasm爲.NET Framework 工具中的程序集註冊工具。註冊成功後,每次C#程序有修改,都不再需要重新註冊了
二、jacob下載完成解壓後,將jacob.dll複製到Windows/system32/,jacob.jar複製到Java項目中
三、打開Eclipse,新建一個Java Project,名字叫:JavaInvokeCSharp,然後新建一個帶有main的類,就叫JavaInvokeCSharpClass,代碼如下:
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class JavaInvokeCSharpClass
{
public static void main(String[] args)
{
try
{
ActiveXComponent dotnetCom = new ActiveXComponent("InvokeCSharp.ExampleClass");
Variant var = Dispatch.call(dotnetCom,"HelloJava","Jacob真是個好東東");
String str = var.toString();
System.out.println(str);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
運行該類,會輸出:你好,Java傳遞過來的參數爲:Jacob真是個好東東
這樣,Java通過jacob調用c#程序就完成了。