本文将详细为大家介绍一个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

代码

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)]… 托福改分

编译程序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调用代码

代码

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调用.net DLL的方法!

巧用C#做中间语言 实现Java调用.net DLL的更多相关文章

  1. paip.java 调用c++ dll so总结

    paip.java 调用c++ dll so总结 ///////JNA (这个ms sun 的) 我目前正做着一个相关的项目,说白了JNA就是JNI的替代品,以前用JNI需要编译一层中间库,现在JNA ...

  2. [JNI] Java 调用 C++ dll

    首先介绍一下JNI吧! JNI 是Java提供的一个用于调用本地接口的接口层,位于Java代码 和 本地代码之间的一层:主要功能是 数据类型的转换,还有就是通过这一层来调用本地代码! 下面就说说Jav ...

  3. Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()

    Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...

  4. java调用c#dll文件配置

    1 在强大的c#语言和java语言之间,二者难免会因为某些特殊的要求会相互调用. 下面就以java调用c#的dll为例做详细介绍 1  在vs中的环境设置如下图,图片中程序仅作为讲解程序,在项目编译成 ...

  5. java调用c++ dll出现中文乱码

    近期的开发用到了使用java调用本机动态连接库的功能,将文件路径通过java调用C++代码对文件进行操作. 在调用中假设路径中包括有中文字符就会出现故障.程序执行就会中止. 以下用一个小样例,来说明记 ...

  6. java调用C++ DLL库方法

    最近一个项目要开发网页端人脸识别项目,人脸识别的算法已经写好,是C++版,但是网页端要求使用Java后台,这就涉及到Java调用DLL的问题.经过查找,实现了一个简单的例子. 1.第一步,先在Java ...

  7. Java调用C# DLL

    由于项目需要,利用了短信猫,但是一个短信猫会加载多个串口,而只需要其AT口,通过java代码,获取其AT口对应的串口号比较困难,于是通过C#获取,这里直接调用C#生成的DLL,但java不能直接调用C ...

  8. JAVA调用动态链接库(dll)

        菜鸡爬坑 基础知识  因为某个东西的keygen我只会在win下生成!! 所以只能出此下策!!之前一直是android下用jni调用so文件,现在试下java在win平台下调用dll 首先还是 ...

  9. JAVA调用动态链接库DLL之JNative学习

    package com.ehfscliax; import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import ...

随机推荐

  1. 【HDOJ】2444 The Accomodation of Students

    图论的题目.着色原理+二分图匹配. #include <cstdio> #include <cstring> #define MAXN 205 char map[MAXN][M ...

  2. java学习之数组排序一:选择排序

    在讲完java中数组定义的两种方式之外,这里需要讲一下对数组常用的方法,第一个就是排序. 加入我们现在有个数组:int[] arr = {12,87,34,3,98,33,103}; 思路1: 1.首 ...

  3. Nodejs爬虫进阶教程之异步并发控制

    Nodejs爬虫进阶教程之异步并发控制 之前写了个现在看来很不完美的小爬虫,很多地方没有处理好,比如说在知乎点开一个问题的时候,它的所有回答并不是全部加载好了的,当你拉到回答的尾部时,点击加载更多,回 ...

  4. 五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O

    五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O 五种I/O 模式:[1]        阻塞 I/O          ...

  5. ikely()与unlikely() 都等同于if, 此处只是做编译优化

    ikely()与unlikely()在2.6内核中,随处可见,那为什么要用它们?它们之间有什么区别呢? 首先明确: if (likely(value))等价于if (value)if (likely( ...

  6. Sort Colors —— LeetCode

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  7. iOS 沙盒路径操作:新建/删除文件和文件夹

    http://blog.csdn.net/totogo2010/article/details/7671144

  8. poj1023

    题目大意:有趣的数字系统 在一个k位的2的补码,,位的索引是从0到k-1位的,值是-2^(k-1),其他位置的i是2^i( (0 ≤ i < k-1) ),例如,3位的数字101是-2^2 + ...

  9. Web —— 小技巧集

    html中设置锚点定位3种方法(已知): 1. id 定位         <a href="#1F" name="1F">锚点1</a> ...

  10. Qt Quick 事件处理之信号与槽

    前面两篇文章<QML 语言基础>和<Qt Quick 简单教程>中我们介绍了 QML 语言的基本的语法和 Qt Quick 的常见元素,亲们,通过这两篇文章,您应该已经能够完毕 ...