背景:
近日一个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();
}
}
}
分享到:
相关推荐
本视频为自己录制的,莫名奇妙的被csdn删除了N次,真是要命!使用的是jacob方法来使用java语言调用.net的dll文件方法!里面有实例,希望对大家有所帮助!欢迎下载
java 调用c++的示例,详见http://blog.csdn.net/u012587637/article/details/40348625
java 调用DLL的方法,使用教程http://blog.csdn.net/pplcheer/article/details/52234697
利用Jacob库从java调用c# dll的样例程序,实现了从java调用c# dll的简单方案,供大家学习参考。
我们知道,使用 JNI 调用 .dll/.so 共享类库是非常非常麻烦和痛苦...使用 JNA ,不需要再编写适配用的 .dll/.so ,只需要在 Java 中编写一个接口和一些代码,作为 .dll/.so 的代理,就可以在 Java 程序中调用 dll/so 。
JNA方式实现Java调用dll的必用jar包
其SDK版通过Java调用SDK方式仅需三行代码集成pdf文档转换功能,可返回转换文本,也提供 pdf文档截取合并等实用的 pdf 编辑功能接口。 此示例基于32 位jre 版本。如如果是64位jre,需替换pdfparser_1.dll、pdfparser_...
操作com组件的可以java直接调用vb的dll 或者直接操作word excel等程序
Java调用GDAL的所有DLL和gdal.jar(java8 bin目录,含Java调用GDAL的DLL和gdal.jar),使用编译好的库方法,获取 tif 文件信息及GDAL方法,具体使用方法:https://blog.csdn.net/antma/article/details/89264910
TSCLIB.dll 适用于delphi、vc、vb.net、jsp、java、asp.net、foxpro等,有大量编程案例参考,且有编程说明书、TSCLIB.dll文件、函数调用等,希望对你有帮助
java项目jar包转dll文件.net引用,jdk版本是1.7,ikvm是1.7.。。。已测试成功,
window环境下封装java调c++的dll,对应博客地址: http://blog.csdn.net/woniu211111/article/details/78041868
和许多解释执行的语言一样,Java 提供了调用原生函数的机制,以加强Java 平台的能 力。Java™ Native Interface (JNI)就是Java 调用原生函数的机制。 事实上,很多Java 核心代码内部就是使用JNI 实现的。这些Java ...
dotNet4Java是用于Java的.Net运行时库,可帮助Java开发人员轻松使用Java中的.Net框架和第三方库。 它旨在提供一种与Java中任何.Net语言(例如C#,Visual Basic... -可以调用.Net类型的成员。 -etc最新版本:1.0.1.0
java 加载dll 异常,包含调试运行和打jar 可以参考https://blog.csdn.net/ADdhtfdhdg/article/details/108754087
JAVA调用动态链接库DLL之JNative学习源码,详细请参考:http://blog.csdn.net/testcs_dn/article/details/26980027
Java调用ffmpeg操作视频、视频截图开发工具包-Win 64位版,含所需DLL文件 JAVA视频操作的最常用工具包的Windows环境开发运行库,支持在Windows下java调用ffmpeg进行视频操作、转码、截图等操作。如果你自己编译、...
这是采用fmj框架在Windows下调用摄像头的小例子,因为依赖的dll是32位的,所以只能用32位的JDK才能正常运行。我在这个聊天程序中有使用,有兴趣也可以看看http://download.csdn.net/detail/onlyxiahui/9434701。
根据京东接口的JAVA版封装的C#DLL