就他吧-9ta8为您提供:身份证查询、15位转16位身份证,手机号码归属地查询,IP地址查询服务,城市天气预报查询,列车时刻表简易快速查询等等查询服务,就他吧欢迎您的光临!!
随笔-95  评论-720  文章-16  trackbacks-102

.net反射技术的应用—如何调用Java的COM接口

        前两天做了一个银行的电子支付接口,我用的是C#开发语言,银行给我们的是Java的COM组件(名字是:RSASig.class),按照银行的说明,一步一步做了配置,大家都知道Java的COM在windows上注册之后是没有动态链接库的,那该怎么在C#中调用其中的方法呢?如果用过.Net反射技术的朋友们很快就会想到使用反射。下面是C#实现反射代码:
 1Assembly assembly = null;
 2Type type = null;
 3string dllPath = @"c:\Reflected.dll"
 4try
 5{
 6    assembly = Assembly.LoadFile(dllPath);
 7    type = assembly.GetType(typeName,true,true);//cMyResult
 8}

 9catch(FileNotFoundException)
10{
11    errMsg = "Could not load Assembly: \""+ dllPath +"\"";
12    return null;
13}

14catch(TypeLoadException)
15{
16    errMsg = "Could not load Type: \"string\" \n from assembly: \"" + dllPath + "\"";
17    return null;
18}

19
20MethodInfo method = type.GetMethod(methodName);//提取方法信息
21object obj = assembly.CreateInstance(typeName);//创建实例
22
23object s = method.Invoke(obj,parameters);//new object[]{"jiangli"});
24assembly = null;
25type = null;
26method =null;
27


        从这段代码中可以看出,这是需要动态链接库的。而Java却没有,怎么用呢?这是摆在面前的一个问题。再仔细看看他的说明,他们在ASP中是这么调用的,Set Obj = Server.CreateObject("ccb.pub.RSAsig"),灵机一动,在VB中是不是也可以这么用呢?马上就就在VB中作了一个实验,结果成功了,VB中的代码是这样实现的:

Namespace test
    
Public Class cJava  
        
Dim obj As Object = Nothing

        
Public Sub New()
            obj 
= GetObject("java:RSASig")
        
End Sub


        
Public Function generateKeys() As Object
            
Return obj.generateKeys()
        
End Function


        
Public Function getPrivateKey() As String
            
Return obj.getPrivateKey()
        
End Function

        
Public Function getPublicKey() As String
            
Return obj.getPublicKey()
        
End Function

        
'签名结果信息
        Public Function generateSigature(ByVal singstr As StringAs String
            
Return obj.generateSigature(singstr)
        
End Function


        
Public Function setPublicKey(ByVal pubKey As StringAs String
            
Return obj.setPublicKey(pubKey)
        
End Function


        
Public Function verifySigature(ByVal orginstr As StringByVal sigStr As StringAs Object
            
Return obj.verifySigature(sigStr, orginstr)
        
End Function

    
End Class

End Namespace


        于是就把它封装成类库,然后在C#中调用,OK,成功了。苦苦寻找了一个星期.net怎么调用Java类中的方法,终于在此画上了一个句号。

        不知道这算不算是.net和java互操作的一个案例。希望这篇文章能对还正在苦苦寻觅.net和java互操作的朋友有点启发。

        如果各位大虾还有别的更简便的方法,请指教。

posted on 2005-08-15 15:01 振河 阅读(3030) 评论(10) 编辑 收藏

评论:
#1楼 2005-08-16 10:33 | 小飞[未注册用户]
c#调用方法不对,可以直接用C#去反射!
 回复 引用   
#2楼 2005-08-16 11:19 | 振河
@小飞
能不能介绍详细点?

 回复 引用   
#3楼 2005-08-16 14:45 | flyarror[未注册用户]
搂主你做的是那个银行的?我好像以前也作过的,呵呵
 回复 引用   
#4楼 2005-09-02 10:16 | ynx[未注册用户]
建行的
 回复 引用   
#5楼 2005-12-03 01:12 | xiaodao[未注册用户]
用Reflecte工具直接看VB.NET的GetObject方法是怎么实现的,直接就调相关的类就行了。
 回复 引用   
#6楼 2006-08-29 08:56 | 我用了[未注册用户]
obj = GetObject("java:RSASig")
这一句出错啊。
提示无法注册ActiveX组件

 回复 引用   
#7楼 2007-01-09 14:01 | 地方[未注册用户]
地方
 回复 引用   
#8楼 2007-01-09 14:02 | ***[未注册用户]
大家好.
 回复 引用   
#9楼 2007-01-09 14:40 | 温家宝[未注册用户]
大家好啊
 回复 引用   
#10楼 2007-05-28 14:25 | cybernaute[未注册用户]
你好,能具体点么?
联系,icyker@gmail.com

 回复 引用   
清新的空气清晰的你愉快的心情陪伴你,欢迎来到梦幻Dot Net。 Free Website Counters
昵称:振河
园龄:6年6个月
粉丝:38
关注:0
<2005年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

搜索

 
 

常用链接

随笔分类

随笔档案

文章分类

文章档案

相册

.NET技术网站

其他技术网

数据库技术网站

友情连接

  • 就他吧服务
  • 幽默笑话

积分与排名

  • 积分 - 428825
  • 排名 - 148

最新评论

阅读排行榜

评论排行榜

推荐排行榜

  就他吧-9ta8伴您开心每一天