国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

java 調(diào)用.net DLL的方法

2023-06-10 12:43:01
字體:
供稿:網(wǎng)友

背景:

近日一個java的項目,客戶要求項目中必須使用其提供的加密機(jī)制,扔給了兩個.net寫的DLL。網(wǎng)絡(luò)上搜了一圈也沒找到啥東西,甚至看到人揚(yáng)言此事絕無可能。郁悶當(dāng)中考慮了一個思路。用C#做一個Com,調(diào)用客戶提供的DLL實(shí)現(xiàn)加密解密的方法,然后提供給java使用。經(jīng)過一番搗騰,最后證實(shí)可行。

環(huán)境與工具:

1、.net framework 3.5 C#

2、java jdk1.5, Tomcat 5.5

3、jacob-1.15-M3

實(shí)現(xiàn)例子:

一、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標(biāo)簽中打開 Assembly Information 將Make assembly Com-Visible一項選中。再切換到Build標(biāo)簽將 Register for COM interop一項選中。

Guid的生成:打開Visual Studio Command Prompt 輸入guidgen ming令調(diào)出工具。類型選擇Registry Format,點(diǎn)擊New Guid,然后COPY出來。

[DispId(1)]為函數(shù)的標(biāo)識。如果有多個函數(shù)可相應(yīng)的在函數(shù)前面加[DispId(2)], [DispId(3)]…

編譯程序Debug目錄中會生成 TestCom.dll 和TestCom.tlb

手工注冊Com方法:

打開Visual Studio Command Prompt進(jìn)入Debug目錄,運(yùn)行ming令注冊:regasm TestCom.DLL /tlb:TestCom.tlb

二、java 調(diào)用 Com

部署jacob

1、在開發(fā)環(huán)境中引入jacob.jar

2、拷貝jacob-1.15-M3-x86.dll 文件到 C:/Windows/System32目錄,如果是Web應(yīng)用的話還需要拷貝到j(luò)dk1.5.0_16/bin目錄(jdk安裝目錄下的bin目錄)

java調(diào)用代碼

代碼

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","哥是第一個參數(shù)","哥是第二個參數(shù)");
                           String str = var.toString(); //返回值
                  } catch (Exception ex) {
                           ex.printStackTrace();
                  }
         }

}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 内乡县| 佳木斯市| 肥东县| 公安县| 大方县| 临武县| 东光县| 凉山| 洛浦县| 永丰县| 万山特区| 剑河县| 青阳县| 胶南市| 嘉鱼县| 临高县| 米易县| 衡南县| 新和县| 宜昌市| 大厂| 四会市| 上饶县| 武乡县| 江川县| 姜堰市| 普安县| 贡山| 文登市| 陇川县| 赫章县| 水富县| 潮州市| 新建县| 巢湖市| 文成县| 揭西县| 临泽县| 肥城市| 贺州市| 兖州市|