近日一个java的项目,客户要求项目中必须使用其提供的加密机制,扔给了两个。net写的DLL.网络上搜了一圈也没找到啥东西,甚至看到人扬言此事绝无可能。郁闷当中考虑了一个思路。用C#做一个Com,调用客户提供的DLL实现加密解密的方法,然后提供给java使用。经过一番捣腾,最后证实可行。
 
   环境与工具:
 
   1、。net framework 3.5 C#
 
   2、java jdk1.5, Tomcat 5.5
 
   3、jacob-1.15-M3
 
   实现例子:
 
   一、C# 制作Com组件
 
   新建一个Class 项目,取名TestCom
 
   Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->using System;
 
   using System.Collections.Generic;
 
   using System.Linq;
 
   using System.Text;
 
   using System.Runtime.InteropServices;
 
   namespace TestCom
 
   {
 
   [Guid("E9BCF867-CD81-40d0-9591-ED28D1ED2B53")]
 
   public interface IEncrypt
 
   {
 
   [DispId(1)]
 
   string GetEncrypt(string str,string str2);
 
   }
 
   [Guid("33A6E58D-E1F5-4b53-B2E2-03B9F8BA2FAD"), ClassInterface(ClassInterfaceType.None)]
 
   public class Encrypt:IEncrypt
 
   {
 
   public Encrypt(){}
 
   public string GetEncrypt(string str,string str2)
 
   {
 
   return "测试 | "+str+"|"+str2;
 
   }
 
   }
 
   }
 
   打开 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)]…
 
   设置强名称:打开Visual Studio Command Prompt 输入:sn -k TestComkey.snk 生成TestComkey.snk 文件
 
   打开 Project--> Properties菜单 在Signing标签中选中 Sign the assembly,选择刚刚生成的强名称文件TestComkey.snk
 
   编译程序Debug目录中会生成 TestCom.dll 和TestCom.tlb www.yzyedu.com
 
   手工注册Com方法:
 
   打开Visual Studio Command Prompt进入Debug目录,运行命令注册:
 
   regasm TestCom.DLL /tlb:TestCom.tlb www.jx-jf.com
 
   gacutil -i TestCom.DLL (执行这个命令需要TestCom.DLL 具有强名称)
 
   二、java 调用 Com
 
   部署jacob
 
   1、在开发环境中引入jacob.jar
 
   2、拷贝jacob-1.15-M3-x86.dll 文件到 C:\Windows\System32目录,如果是Web应用的话还需要拷贝到jdk1.5.0_16\bin目录(jdk安装目录下的bin目录)
 
   java调用代码
 
   Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->import com.jacob.activeX.ActiveXComponent;
 
   import com.jacob.com.ComThread;
 
   import com.jacob.com.Dispatch;
 
   import com.jacob.com.Variant;
 
   public class test {
 
   /**
 
   * @param args
 
   */
 
   public static void main(String[] args) {
 
   // TODO Auto-generated method stub
 
   try{
 
   ActiveXComponent dotnetCom = null;
 
   dotnetCom = new ActiveXComponent("TestCom.Encrypt");
 
   Variant var = Dispatch.call(dotnetCom,"GetEncrypt","哥是第一个参数","哥是第二个参数");
 
   String str = var.toString(); //返回值
 
   } catch (Exception ex) {
 
   ex.printStackTrace();
 
   }
 
   }
 
   }

Java Tomcat 中调用.net DLL的方法的更多相关文章

  1. Java程序中调用Python脚本的方法

    在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法. 1.在Eclipse中新建Maven工程: 2.pom.xml文件中添加如下依赖包之后 ...

  2. Generate PDF in Sourcing through concurrent request,在EBS java并发中调用指定am的方法

    package oracle.apps.pon.printing.cp; import java.io.InputStream; import java.io.FileOutputStream; im ...

  3. 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案

    方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...

  4. VC中调用COM组件的方法(转载)

    原文参考:http://hi.baidu.com/mingyueye/item/53ebecd44da76917d80e4449 总结一下在VC中调用COM组件的方法 准备及条件: COM服务器为进程 ...

  5. Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

    文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Ap ...

  6. vc中调用Com组件的方法详解

    vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGet ...

  7. 在SQL Server 2008中调用.net,dll

    原文:在SQL Server 2008中调用.net,dll T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可以在SQ ...

  8. 在.net中调用Delphi dll的Pchar转换

    Pchar是非托管代码,要在.net中调用Delphi dll中的功能,请使用MarshalAs属性告知.net调用PInvoke去转换.net中标准的string类型.如果Delphi dll是De ...

  9. (转)DedeCms Runphp 标签中调用其他变量的方法

    DedeCms Runphp 标签中调用其他变量的方法 我们都知道,在DedeCMS中是可以使用PHP的,常见的方法就是if else了,例如模板制作中,我们需要对来源和作者进行判断,如果为空,则提示 ...

随机推荐

  1. cf590B Chip 'n Dale Rescue Rangers

    B. Chip 'n Dale Rescue Rangers time limit per test 1 second memory limit per test 256 megabytes inpu ...

  2. Visual Studio创建跨平台移动应用_03.AppBuilder Extension

    1 背景 本章节是关于Telerik AppBuilder for Visual Studio的. 目前(2014.12)为Telerik公司Telerik Platform的一部分,Telerik ...

  3. [Java] 垃圾回收 ( Garbage Collection ) 的步骤演示

    关于 JVM 垃圾回收机制的基础内容,可参考上一篇博客 垃圾回收机制 ( Garbage Collection ) 简介 上一篇博客,介绍了堆的内存被分为三个部分:年轻代.老年代.永生代.这篇博文将演 ...

  4. icinga 被动模式 nsca 安装

    本文假设读者已安装好icinga,此外nsca本身nagios插件,icinga/nagios都适用 一.编译安装nsca1.编译,拷贝文件tar -vxzf nsca-2.7.2.tar.gz./c ...

  5. Unity3D——窗体介绍

    这是本人第一次的Unity的博客,主要还是依据雨松MOMO的视频来进行的,由于感觉视频比較直观,对于入门比較快,再加上自己有对应的编程基础,如今看书的话效率不高,所以先看几个视频了解一下大体的流程,感 ...

  6. Lucene和jackson冲突

    今天在使用lucene的时候,想直接在Controller中返回json对象,于是在Spring中配置了JackSon的converter: <bean id="jacksonMess ...

  7. mysql中如何更新一个字段的值为它本身的值连接上一个字符串

    CONCAT(str1,str2,...)     返回结果为连接参数产生的字符串. 如有任何一个参数为NULL ,则返回值为 NULL. 或许有一个或多个参数. 如果所有参数均为非二进制字符串,则结 ...

  8. INFORMATION_SCHEMA.COLUMNS 查询表字段语句

    INFORMATION_SCHEMA.COLUMNS 视图以 sysobjects.spt_data type_info.systypes.syscolumns.syscomments.sysconf ...

  9. CentOS 6.6下PXE+Kickstart无人值守安装操作系统

    一.简介 1.1 什么是PXE PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持 ...

  10. 几个常用的ps命令

    1. ps aux If you are looking for a short summary of the active processes, use  ps aux [root@rhel7 tm ...