背景:
近日一个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
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
手工注册Com方法:
打开Visual Studio Command Prompt进入Debug目录,运行命令注册:
regasm TestCom.DLL /tlb:TestCom.tlb
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调用代码
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调用C#封装的DLL方法 #### 第一种方法:Java利用JNA进行调用 **背景介绍:** 为了实现Java与C#之间的交互,一种常用的方式是通过调用C#封装的DLL文件来完成特定功能。这种方法涉及到.NET Framework与Java...
5. **C#调用Java代码**: 在C#项目中,你可以像调用任何其他.NET库一样调用转换后的dll文件中的方法。不过,由于是跨平台调用,需要注意一些类型映射和异常处理的问题。 6. **测试与调试**: 完成上述步骤后,务必...
- C# DLL的源码,展示了如何定义公共接口和方法供Java调用。 - Java调用DLL的源码,展示了如何使用JNA或IKVM.NET等工具进行调用。 - 测试代码,用于验证Java成功调用C# DLL并执行预期功能。 要正确使用这些源码,你...
提供的`java调用.NET方法.wmv`视频文件可能是作者录制的教程,展示了具体的操作过程和示例代码,对于初学者来说,观看此类视频教程往往能更直观地理解如何使用JACOB。 总之,通过JACOB库,Java开发者可以利用.NET ...
5. **调用DLL方法**:现在,你可以通过实例化实现接口的类并调用其方法来调用C# DLL的功能了。 除了JNA,还可以使用其他库如JNI或者通过创建一个中间层(如C++或C)来桥接Java和C#。然而,这些方法相比JNA通常更...
4. **调用DLL函数**:现在你可以像调用Java方法一样调用DLL函数了。例如: ```java int result = myDLL.AddNumbers(5, 3); System.out.println("Result: " + result); ``` 5. **处理错误**:在调用DLL函数时,...
另一个文件"Jacob_NET"可能是一个示例的C# DLL,或者包含与Java调用C#相关的.NET项目文件,用于演示如何创建C# DLL并与Java集成。 在实际操作中,Java开发者需要以下步骤来调用C# DLL: 1. **配置Jacob**:在Java...
Java调用C# DLL的方法简介 在跨平台的软件开发中,有时我们需要在Java应用程序中调用由C#编写的动态链接库(DLL)。这通常涉及到两种主要的技术:JNI(Java Native Interface)和第三方工具。这篇知识文章将详细介绍...
Java调用OCX控件是跨平台编程中的一项技术挑战,因为OCX(Object Linking and Embedding Control)是微软Windows环境下的组件对象模型(COM)控件。然而,通过第三方库如Jacob(Java和COM的桥梁),Java开发者能够在...
### Java调用DLL:JNative概述 在Java项目中,有时候需要调用本地系统的动态链接库(DLL)来实现特定的功能。传统的做法是通过Java Native Interface (JNI)来进行调用,但这往往涉及到复杂的配置和繁琐的过程。为了...
### JAVA调用C# DLL文件的关键步骤和技术细节 #### 一、C#编写COM组件 在实际工作中,可能需要在不同编程语言之间进行交互。例如,一个基于Java的应用程序可能需要调用用C#编写的DLL文件来实现某些功能。这通常...
1. Java调用DLL的原理和方法,包括JNI和JNA的使用。 2. 如何在Java中通过JACOB等工具与OCX控件进行交互。 3. "EdisonSmsGw.ocx"的具体应用,可能涉及到短信服务的实现。 4. 实际的Java代码示例,供学习和参考。 ...
标题"JAVA调用C++/C#的DLL"涉及到的技术点主要集中在Java Native Interface(JNI)上,这是一种允许Java代码与其他编程语言(如C++或C#)进行交互的标准机制。下面我们将深入探讨这一主题。 首先,JNI是Java平台的...
使用IKVM.NET,你可以将Java的.jar文件转换为.NET的DLL,然后在C#中直接引用和调用。这种方法避免了生成.NET组件的步骤,但可能需要处理类型映射和兼容性问题。 3. **Remoting/Thrift/RPC**: 通过网络通信协议,...
在IT行业中,跨语言通信是一项常见的任务,尤其是在大型系统中,不同组件可能由不同语言编写。...提供的"Java调用C#的DLL实现方案.docx"文档应该会详细解释这些方法的步骤和示例代码,建议仔细阅读。
标题"JNA方式实现Java调用dll的必用jar包"指的是使用JNA库来调用Windows平台上的动态链接库(.dll文件)所需的Java类库。这个"jna5.jar"文件是JNA的一个版本,其中包含了所有必要的组件,使得Java程序能够通过JNA...
在本案例中,我们将探讨如何利用SWIG在Java和C#中调用由C++编写的动态链接库(DLL)。VS2012是Visual Studio 2012的缩写,是一款由Microsoft提供的集成开发环境,用于创建Windows应用、Web应用、移动应用等。 首先,...