Java连接.Net测试(二)

来源:互联网 发布:linux安装安卓软件 编辑:程序博客网 时间:2024/06/10 04:06

本节说明Java通过Com组件连接.Net(调用dll)实现方法及主要代码,如下:

 

1. VS2008新建-项目-C#-类库,取名,如:J2NByDllClassLibrary;

 

2. 添加-新建项-类:MyJ2N,编写代码(示例如下):
using System; 
using System.Collections.Generic; 
using System.Linq;
using System.Text; 
using System.Runtime.InteropServices;

namespace J2NByDllClassLibrary
{
    [Guid("3DB8FA5A-50FE-415d-B4D1-74EF249D46A2")]
    public interface IMyJ2N
    {
        [DispId(1)]
        string GetEncrypt(string str, string str2);
    }

    [Guid("7BE525EE-46AE-4cc5-B21A-F4BF558AD79E"), ClassInterface(ClassInterfaceType.None)]
    public class MyJ2N : IMyJ2N
    {
        public MyJ2N() { }
        public string GetEncrypt(string str, string str2)  //此处的两个参数没用到,只是示例

可以传参
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 5; i++)
            {
                sb.Append(i + ",");
                sb.Append("aa" + i + ",");
                sb.Append("bb" + i + ",");
            }
            //sb.Remove(sb.Length - 2, 1);
            //System.Console.WriteLine(sb.ToString());
            return sb.ToString();
        }       
    }
}

 

3. GUID生成:
打开Visual Studio命令提示,输入guidgen 命令调出工具。类型选择Registry Format,点击两次New

Guid,生成两个GUID,并分别COPY出来替换上面示例代码的interface和class类名处的GUID。

 

4. 设置强名称:
打开Visual Studio命令提示,输入:sn -k TestComkey.snk 生成TestComkey.snk 文件(生成文件的路

径可自己确定,我选择在项目所在文件夹的bin/debug/下,即转到该文件夹路径再执行SN命令)。


5. 右击程序名打开property窗口:
在应用程序标签中打开 “程序集信息” 将“使程序集COM可见”一项选中。再切换到生成标签将 “为

COM互操作注册”一项选中。在签名标签中选中“为程序集签名”,浏览选择刚刚生成的强名称文件

TestComkey.snk。

 

6. 生成:确认以上操作执行完并保存后,右击程序名选生成菜单,生成程序集。

 

7. 注册COM:
打开Visual Studio命令提示并进入程序的Debug目录,运行命令注册并放入缓存:
regasm J2NByDllClassLibrary.DLL /tlb:J2NByDllClassLibrary.tlb
gacutil -i J2NByDllClassLibrary.DLL


8. java调用COM:
需引入jacob.jar包。
示例代码:
 public static void main(String[] args) {  
  ActiveXComponent com = new ActiveXComponent("J2NByDllClassLibrary.MyJ2N");

//namespace.class
  Variant var = Dispatch.call(com, "GetEncrypt", "第一个参数", "第二个参数");

//COM,方法名,参数
  String retVal = var.getString();
  String[] array = retVal.split(",");
  List<User> users = new java.util.ArrayList<User>();
  for (int i = 0; i < array.length; i+=3) {
   if(array[i].length() > 0){
    User user = new User();
    user.setUserId(Integer.parseInt(array[i]));
    user.setUserName(array[i + 1]);
    user.setPassword(array[i + 2]);
    
    users.add(user);
   }
  }
    
  System.out.println(users.size());
 }