|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
c++是语言,其实C++和java的应用范围根本就不一样的。在java应用的领域内,c++是不合适的。所以微软才搞了C#和Java对抗。</p>本文将具体为人人先容一个java挪用.netDLL的办法,以完成特别的客户的特别请求:“在Java项目中必需利用其供应的用.net写的DLL加密机制!”
情况与工具:
◆.netframework3.5C#
◆javajdk1.5,Tomcat5.5
◆jacob-1.15-M3
完成例子:
1、C#制造Com组件
新建一个Class项目,取名TestCom
代码
usingSystem;usingSystem.Collections.Generic;
usingSystem.Linq;usingSystem.Text;
usingSystem.Runtime.InteropServices;
namespaceTestCom
{[Guid("E9BCF867-CD81-40d0-9591-ED28D1ED2B53")]
publicinterfaceIEncrypt
{[DispId(1)]
stringGetEncrypt(stringstr,stringstr2);
}
[Guid("33A6E58D-E1F5-4b53-B2E2-03B9F8BA2FAD"),
ClassInterface(ClassInterfaceType.None)]
publicclassEncrypt:IEncrypt
{publicEncrypt(){}
publicstringGetEncrypt(stringstr,stringstr2)
{
return"测试"+str+""+str2;
}
}
}
翻开Project-->Properties菜单在Application标签中翻开AssemblyInformation将MakeassemblyCom-Visible一项选中。再切换到Build标签将RegisterforCOMinterop一项选中。
Guid的天生:翻开VisualStudioCommandPrompt输出guidgen命令修改工具。范例选择RegistryFormat,点击NewGuid,然后COPY出来。
[DispId(1)]为函数的标识。假如有多个函数可响应的在函数后面加[DispId(2)],[DispId(3)]…
编译程序Debug目次中会天生TestCom.dll和TestCom.tlb
手工注册Com办法:
翻开VisualStudioCommandPrompt进进Debug目次,运转命令注册:regasmTestCom.DLL/tlb:TestCom.tlb
2、Java挪用Com
部署jacob
◆在开辟情况中引进jacob.jar
◆拷贝jacob-1.15-M3-x86.dll文件到C:WindowsSystem32目次,假如是Web使用的话还必要拷贝到jdk1.5.0_16in目次(jdk安装目次下的bin目次)
java挪用代码
代码
importcom.jacob.activeX.ActiveXComponent;
importcom.jacob.com.ComThread;
importcom.jacob.com.Dispatch;
importcom.jacob.com.Variant;
publicclasstest
{
/***@paramargs*/
publicstaticvoidmain(String[]args)
{
//TODOAuto-generatedmethodstub
try
{
ActiveXComponentdotnetCom=null;
dotnetCom=newActiveXComponent("TestCom.Encrypt");
Variantvar=Dispatch.call(dotnetCom,
"GetEncrypt","哥是第一个参数","哥是第二个参数");
Stringstr=var.toString();//前往值
}catch(Exceptionex)
{
ex.printStackTrace();
}
}
}这便完成了Java挪用.netDLL的办法!
据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。 |
|