巧用C#做中间语言 实现Java调用.net DLL的方法

开发 后端
本文为大家讲一个用C#做一个Com,调用.net DLL实现加密解密的方法,然后提供给java使用,达到利用java调用.net DLL的功能。

51CTO曾经为大家讲过“Java与.NET的WebServices相互调用”,但是如何实现Java调用.net DLL的方法呢?我们在网上搜索了一番,也没找到啥东西,甚至看到人扬言此事绝无可能。本文将详细为大家介绍一个java调用.net DLL的方法,以实现特殊的客户的特殊要求:“在Java项目中必须使用其提供的用.net写的DLL加密机制!”

环境与工具:

◆.net framework 3.5  C#

◆java jdk1.5,   Tomcat 5.5

◆jacob-1.15-M3

实现例子:

一、C# 制作Com组件

新建一个Class 项目,取名TestCom

代码

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Runtime.InteropServices;  
  6.  
  7. namespace TestCom  
  8. {  
  9.     [Guid("E9BCF867-CD81-40d0-9591-ED28D1ED2B53")]  
  10.     public interface IEncrypt  
  11.     {  
  12.         [DispId(1)]  
  13.          string GetEncrypt(string str,string str2);  
  14.     }  
  15.     [Guid("33A6E58D-E1F5-4b53-B2E2-03B9F8BA2FAD"), ClassInterface(ClassInterfaceType.None)]  
  16.     public class Encrypt:IEncrypt  
  17.     {  
  18.         public Encrypt(){}  
  19.  
  20.         public string GetEncrypt(string str,string str2)  
  21.         {  
  22.              
  23.              return  "测试 | "+str+"|"+str2;  
  24.         }  
  25.     }  

打开 Project-->  Properties菜单  在Application标签中打开 Assembly Information 将Make assembly Com-Visible一项选中。再切换到Build标签将 Register for COM interop一项选中。

Guid的生成:打开Visual Studio Command Prompt 输入guidgen 命令调出工具。类型选择Registry Format,点击New Guid,然后COPY出来。

[DispId(1)]为函数的标识。如果有多个函数可相应的在函数前面加[DispId(2)], [DispId(3)]…

编译程序Debug目录中会生成 TestCom.dll 和TestCom.tlb

手工注册Com方法:

打开Visual Studio Command Prompt进入Debug目录,运行命令注册:regasm TestCom.DLL /tlb:TestCom.tlb

二、Java调用Com

部署jacob

◆在开发环境中引入jacob.jar

◆拷贝jacob-1.15-M3-x86.dll 文件到 C:\Windows\System32目录,如果是Web应用的话还需要拷贝到jdk1.5.0_16\bin目录(jdk安装目录下的bin目录)

java调用代码

代码

  1. import com.jacob.activeX.ActiveXComponent;  
  2. import com.jacob.com.ComThread;  
  3. import com.jacob.com.Dispatch;  
  4. import com.jacob.com.Variant;  
  5. public class test {  
  6.  
  7.     /**  
  8.      * @param args  
  9.      */  
  10.     public static void main(String[] args) {  
  11.         // TODO Auto-generated method stub  
  12.         try{  
  13.             ActiveXComponent dotnetCom = null;  
  14.             dotnetCom = new ActiveXComponent("TestCom.Encrypt");  
  15.             Variant var = Dispatch.call(dotnetCom,"GetEncrypt","哥是***个参数","哥是第二个参数");  
  16.             String str  = var.toString(); //返回值  
  17.             } catch (Exception ex) {  
  18.                 ex.printStackTrace();  
  19.             }  
  20.     }  
  21.  

这便完成了Java调用.net DLL的方法!

 

原文地址:http://www.cnblogs.com/windsor/archive/2010/06/17/1759289.html

 

【编辑推荐】

  1. Java与.NET的WebServices相互调用
  2. 平台之争 Java与.NET谁更有前途
  3. Java与.NET 谁能主宰未来?
  4. Sun提高Java与.Net兼容性
责任编辑:佚名 来源: 汪翔blog
相关推荐

2009-08-14 16:25:36

C#中间语言和元数据

2009-08-03 12:57:27

C#调用DLL

2009-07-31 17:28:35

C#语言调用DLL

2009-08-05 09:30:39

C#调用DLL函数

2009-08-05 09:40:02

C#调用DLL函数

2011-04-08 09:52:44

C++C#DLL

2010-01-15 16:12:40

VB.NET调用DLL

2009-08-07 17:22:36

C#调用dll导出函数

2009-08-05 17:06:39

ASP调用C# DLL

2009-08-05 16:41:36

C#调用VC dll

2009-09-02 17:16:01

冒泡排序

2009-07-27 14:13:56

调用c#方法Java scriptASP.NET

2009-08-05 16:49:42

C#中调用dll

2009-08-05 09:22:43

C#调用VC DLL

2009-08-05 09:09:14

C#调用VC DLL接

2009-08-05 15:04:14

C# dll注入

2010-08-23 14:51:37

保护.net反编译

2009-06-19 16:55:47

JNI调用C语言

2009-08-31 18:05:14

C#调用WalkTre

2009-08-31 16:33:28

C#调用Dispose
点赞
收藏

51CTO技术栈公众号