近日一个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. 【转】Android理解:显式和隐式Intent---- try catch

    原文网址:http://blog.csdn.net/xiao__gui/article/details/11392987 Intent是Android初学者比较难理解的一个东西.我这里以通俗易懂的语言 ...

  2. 【转】Linux I2C设备驱动编写(三)-实例分析AM3359

    原文网址:http://www.cnblogs.com/biglucky/p/4059586.html TI-AM3359 I2C适配器实例分析 I2C Spec简述 特性: 兼容飞利浦I2C 2.1 ...

  3. SWFObject: 基于Javascript的Flash媒体版本检测与嵌入模块

    原文地址:http://www.awflasher.com/flash/articles/swfobj.htm SWFObject: 基于Javascript的Flash媒体版本检测与嵌入模块原文:S ...

  4. M - Jamie's Contact Groups - poj 2289(二分图多重匹配)

    题意:某个人通讯录有很多人,现在他想把这个人分组,给的数据是可以把这个人分在那些组里面,现在他想知道分组后,人最多的那个组至少有多少人. 分析:因为没有给组限制有多少人,可以使用二分求出来最小的那个, ...

  5. Flask-SQLAlchemy获取一个字段里去掉重复的数据

    注意:可排序的列表内元素不可以是字典等复杂数据类型   比较容易记忆的是用内置的set l1 = ['b','c','d','b','c','a','a']l2 = list(set(l1))prin ...

  6. [转]百度地图点聚合MarkerClusterer移动地图时,Marker的Label丢失的问题

    参考文献:http://www.cnblogs.com/jicheng1014/p/3143859.html 问题现象: 使用MarkerClusterer_min.js,可以实现点聚合,但是当将带有 ...

  7. SKPhysicsJointSliding类

    继承自 NSObject 符合 NSCoding(SKPhysicsJoint)NSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit. ...

  8. Sublime Text 2.0.2 注册码

    Sublime Text 2.0.2 注册码 直接输入注册码就可以了----- BEGIN LICENSE -----Andrew WeberSingle User LicenseEA7E-85560 ...

  9. mysql去掉字段字符中间空格

    mysql有什么办法批量去掉某个字段字符中的空格?不仅是字符串前后的空格,还包含字符串中间的空格,答案是 replace,使用mysql自带的 replace 函数,另外还有个 trim 函数.   ...

  10. [转] 深入剖析 linux GCC 4.4 的 STL string

    本文通过研究STL源码来剖析C++中标准模板块库std::string运行机理,重点研究了其中的引用计数和Copy-On-Write技术. 平台:x86_64-redhat-linux gcc ver ...