JAVA 应用 JACOB包 调用.NET DLL(测试连接成功)

JAVA 使用 JACOB包 调用.NET DLL(测试连接成功)1,大概步骤1) 准备好 DLL文件(32位和64位系统下编译的 有差

JAVA 使用 JACOB包 调用.NET DLL(测试连接成功)
1,大概步骤
1) 准备好 DLL文件(32位和64位系统下编译的 有差别, 不能通用)。
2) 装好jdk和eclipse.
3) 下载jacob最新的包(目前是1.7)
4) 将jacob.jar导入到eclipse项目路径, 将jacob-1.17-M2-x64.dll(或者是jacob-1.17-M2-x32.dll)添加到环境变量path.
5) 可以开始.


2. 小例子
1).NET代码
创建InvokeCSharp项目,在InvokeCSharp.cs文件中加如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace InvokeCSharp
{

    [Guid("C41D14FD-F719-41fc-94CD-4B64D19F44B0")]
    public interface IExampleClass
    {
                [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;
        }
    }
}
2)需要注意的是编译前的配置步骤,主要有以下几步:
1、解决方案资源管理器中右键点击项目名称“InvokeCSharp”,选择属性
2、在“应用程序”页签中,点击“程序集信息”按钮,在弹出的对话框中勾上最后一
  个复选框“使程序集COM可见”
3、在“生成”页签中,勾上最后一个复选框“为COM互操作注册”
4、生成“InvokeCSharp”项目
5、在项目的Debug\bin文件夹下会有这样几个文件:一个是InvokeCSharp.dll,另
  一个是InvokeCSharp.tlb,这个就是我们要的COM程序
6、最后,注册COM,打开“Visual Studio 命令提示”,进入InvokeCSharp项目
  的Debug\bin文件夹,运行“regasmInvokeCSharp.dll /tlb:InvokeCSharp.tlb”,这样就注册了COM,regasm为.NET Framework 工具中的程序集注册工具。注册成功后,每次C#程序有修改,都不再需要重新注册了

3)java 代码
  import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.sun.xml.internal.ws.resources.DispatchMessages;

public class JavaInvokeCSharpClass {

private final String DLL_NAME = "DLLforVB.ComDLLforVB";

private ActiveXComponent dotnetCom = null;
private Dispatch dispatch = null;
private Variant var = null;

public JavaInvokeCSharpClass() {
dotnetCom = new ActiveXComponent(DLL_NAME);
dispatch = dotnetCom.getObject();
}

public static void main(String[] args) {
try {
JavaInvokeCSharpClass test = new JavaInvokeCSharpClass();
            test.var = test.dispatch.call(test.dotnetCom, "ToolGetLocalIP");
String str = test.var.toString();
System.out.println(str);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}