本文将详细为大家介绍一个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. ab压测 apr_socket_recv: Connection reset by peer (104)错误解决方法

    用apache自带ab命令进行压测,报了如下错误: 原因是在ab的程序源码中对并发数有限制. 解决办法:修改apache源码support下面的ab.c源代码,然后重新编译.修改内容如下:

  2. 高等数学(拉格朗日乘子法):NOI 2012 骑行川藏

    [NOI2012] 骑行川藏 输入文件:bicycling.in   输出文件:bicycling.out   评测插件 时间限制:1 s   内存限制:128 MB NOI2012 Day1 Des ...

  3. 数据结构(线段树):BZOJ 3126: [Usaco2013 Open]Photo

    3126: [Usaco2013 Open]Photo Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 222  Solved: 116 Descrip ...

  4. android导入项目出错处理

    问题: 执行Import-Android下的Existing Android Code Into Workspace 解决方法:

  5. 数学概念——A 几何概型

    You are going from Dhaka to Chittagong by train and you came to know one of your old friends is goin ...

  6. android webview load 本地文件需要注意的地方

    记得在工程的main下必须是assets文件夹. 而webview.loadUrl时 必须是   android_asset 必须这样对应,否则无法加载本地html. 具体原因只能在深入学习后再总结了 ...

  7. 使用string

    public class UsingString {     public static void testFindStr(String str)     {         System.out.p ...

  8. Mac下Intellij IDea发布Java Web项目详解三 新建Module

    准备工作1:新建第一个JavaWeb项目 Step4 添加两个module 4.1 右键[WebWorkSpace]-[New]-[Module] 4.2 重复 准备工作1:新建第一个JavaWeb项 ...

  9. 二次战CPP链表

    Felling By Ruiy: Pre-learnning link list knowloages 熟悉 指针相关操作应用+结构体数据类型应用,且能简单融合使用,堆内存(内存泄露)->类似于 ...

  10. hdu 4640 Island and study-sister(状态压缩dp)

    先处理前两个学长到达各个点所需要的最少时间,在计算前两个学长和最后一个学长救出所有学妹的最少时间. #include<stdio.h> #include<string.h> # ...