巧用C#做中間語言 實現(xiàn)Java調(diào)用.net DLL.
本文將詳細為大家介紹一個java調(diào)用.net DLL的方法迈着,以實現(xiàn)特殊的客戶的特殊要求:“在Java項目中必須使用其提供的用.net寫的DLL加密機制情臭!”
環(huán)境與工具:
◆.net framework 3.5 C#
◆java jdk1.5散址, Tomcat 5.5
◆jacob-1.15-M3
實現(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標簽中打開 Assembly Information 將Make assembly Com-Visible一項選中朝捆。再切換到Build標簽將 Register for COM interop一項選中鹤盒。
Guid的生成:打開Visual Studio Command Prompt 輸入guidgen 命令調(diào)出工具百炬。類型選擇Registry Format褐隆,點擊New Guid,然后COPY出來。
[DispId(1)]為函數(shù)的標識剖踊。如果有多個函數(shù)可相應(yīng)的在函數(shù)前面加[DispId(2)], [DispId(3)]…
編譯程序Debug目錄中會生成 TestCom.dll 和TestCom.tlb
手工注冊Com方法:
打開Visual Studio Command Prompt進入Debug目錄庶弃,運行命令注冊:regasm TestCom.DLL /tlb:TestCom.tlb
二、Java調(diào)用Com
部署jacob
◆在開發(fā)環(huán)境中引入jacob.jar
◆拷貝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();? ? ? ? ? ? ??
}? ? ??
}? ?
}
這便完成了Java調(diào)用.net DLL的方法歇攻!
轉(zhuǎn)載至這里