`

java 调用.net DLL的方法

阅读更多
背景:
  近日一个java的项目,客户要求项目中必须使用其提供的加密机制,扔给了两个.net写的DLL。网络上搜了一圈也没找到啥东西,甚至看到人扬言此事绝无可能。郁闷当中考虑了一个思路。用C#做一个Com,调用客户提供的DLL实现加密解密的方法,然后提供给java使用。经过一番捣腾,最后证实可行。

环境与工具:

1、.net framework 3.5  C#

2、java jdk1.6,   Tomcat 7.0

3、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)]…



设置强名称:打开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.6.0_23\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调用C#封装的dll方法

    ### Java调用C#封装的DLL方法 #### 第一种方法:Java利用JNA进行调用 **背景介绍:** 为了实现Java与C#之间的交互,一种常用的方式是通过调用C#封装的DLL文件来完成特定功能。这种方法涉及到.NET Framework与Java...

    java项目jar包转dll文件.net引用

    5. **C#调用Java代码**: 在C#项目中,你可以像调用任何其他.NET库一样调用转换后的dll文件中的方法。不过,由于是跨平台调用,需要注意一些类型映射和异常处理的问题。 6. **测试与调试**: 完成上述步骤后,务必...

    Java调用C#DLL

    - C# DLL的源码,展示了如何定义公共接口和方法供Java调用。 - Java调用DLL的源码,展示了如何使用JNA或IKVM.NET等工具进行调用。 - 测试代码,用于验证Java成功调用C# DLL并执行预期功能。 要正确使用这些源码,你...

    java语言使用.net的方法

    提供的`java调用.NET方法.wmv`视频文件可能是作者录制的教程,展示了具体的操作过程和示例代码,对于初学者来说,观看此类视频教程往往能更直观地理解如何使用JACOB。 总之,通过JACOB库,Java开发者可以利用.NET ...

    Java 调用 C# DLL

    5. **调用DLL方法**:现在,你可以通过实例化实现接口的类并调用其方法来调用C# DLL的功能了。 除了JNA,还可以使用其他库如JNI或者通过创建一个中间层(如C++或C)来桥接Java和C#。然而,这些方法相比JNA通常更...

    java使用jawin调用dll文件

    4. **调用DLL函数**:现在你可以像调用Java方法一样调用DLL函数了。例如: ```java int result = myDLL.AddNumbers(5, 3); System.out.println("Result: " + result); ``` 5. **处理错误**:在调用DLL函数时,...

    java调用c#样例

    另一个文件"Jacob_NET"可能是一个示例的C# DLL,或者包含与Java调用C#相关的.NET项目文件,用于演示如何创建C# DLL并与Java集成。 在实际操作中,Java开发者需要以下步骤来调用C# DLL: 1. **配置Jacob**:在Java...

    Java调用C# DLL的方法简介

    Java调用C# DLL的方法简介 在跨平台的软件开发中,有时我们需要在Java应用程序中调用由C#编写的动态链接库(DLL)。这通常涉及到两种主要的技术:JNI(Java Native Interface)和第三方工具。这篇知识文章将详细介绍...

    java调用ocx控件,jacob,jar和dll文件

    Java调用OCX控件是跨平台编程中的一项技术挑战,因为OCX(Object Linking and Embedding Control)是微软Windows环境下的组件对象模型(COM)控件。然而,通过第三方库如Jacob(Java和COM的桥梁),Java开发者能够在...

    java调用DLL:JNative

    ### Java调用DLL:JNative概述 在Java项目中,有时候需要调用本地系统的动态链接库(DLL)来实现特定的功能。传统的做法是通过Java Native Interface (JNI)来进行调用,但这往往涉及到复杂的配置和繁琐的过程。为了...

    JAVA调用C#的DLL文件

    ### JAVA调用C# DLL文件的关键步骤和技术细节 #### 一、C#编写COM组件 在实际工作中,可能需要在不同编程语言之间进行交互。例如,一个基于Java的应用程序可能需要调用用C#编写的DLL文件来实现某些功能。这通常...

    JAVA-dll-ocx.rar_Java调用dll_dll ocx_java EdisonSmsGw.ocx_java 调用o

    1. Java调用DLL的原理和方法,包括JNI和JNA的使用。 2. 如何在Java中通过JACOB等工具与OCX控件进行交互。 3. "EdisonSmsGw.ocx"的具体应用,可能涉及到短信服务的实现。 4. 实际的Java代码示例,供学习和参考。 ...

    JAVA调用C++/C#的DLL

    标题"JAVA调用C++/C#的DLL"涉及到的技术点主要集中在Java Native Interface(JNI)上,这是一种允许Java代码与其他编程语言(如C++或C#)进行交互的标准机制。下面我们将深入探讨这一主题。 首先,JNI是Java平台的...

    C#调用java直接调用无需生成.net组件

    使用IKVM.NET,你可以将Java的.jar文件转换为.NET的DLL,然后在C#中直接引用和调用。这种方法避免了生成.NET组件的步骤,但可能需要处理类型映射和兼容性问题。 3. **Remoting/Thrift/RPC**: 通过网络通信协议,...

    Java调用C#的DLL实现方案.rar

    在IT行业中,跨语言通信是一项常见的任务,尤其是在大型系统中,不同组件可能由不同语言编写。...提供的"Java调用C#的DLL实现方案.docx"文档应该会详细解释这些方法的步骤和示例代码,建议仔细阅读。

    JNA方式实现Java调用dll的必用jar包

    标题"JNA方式实现Java调用dll的必用jar包"指的是使用JNA库来调用Windows平台上的动态链接库(.dll文件)所需的Java类库。这个"jna5.jar"文件是JNA的一个版本,其中包含了所有必要的组件,使得Java程序能够通过JNA...

    swig--在java、C#中调用c++写的DLL(以vs2012配置为例)

    在本案例中,我们将探讨如何利用SWIG在Java和C#中调用由C++编写的动态链接库(DLL)。VS2012是Visual Studio 2012的缩写,是一款由Microsoft提供的集成开发环境,用于创建Windows应用、Web应用、移动应用等。 首先,...

Global site tag (gtag.js) - Google Analytics