1
Assembly assembly
=
null
;
2 Type type = null ;
3 string dllPath = @" c:\Reflected.dll "
4 try
5 {
6 assembly = Assembly.LoadFile(dllPath);
7 type = assembly.GetType(typeName,true,true);//cMyResult
8}
9 catch (FileNotFoundException)
10 {
11 errMsg = "Could not load Assembly: \""+ dllPath +"\"";
12 return null;
13}
14 catch (TypeLoadException)
15 {
16 errMsg = "Could not load Type: \"string\" \n from assembly: \"" + dllPath + "\"";
17 return null;
18}
19
20 MethodInfo method = type.GetMethod(methodName); // 提取方法信息
21 object obj = assembly.CreateInstance(typeName); // 创建实例
22
23 object s = method.Invoke(obj,parameters); // new object[]{"jiangli"});
24 assembly = null ;
25 type = null ;
26 method = null ;
27
2 Type type = null ;
3 string dllPath = @" c:\Reflected.dll "
4 try
5 {
6 assembly = Assembly.LoadFile(dllPath);
7 type = assembly.GetType(typeName,true,true);//cMyResult
8}
9 catch (FileNotFoundException)
10 {
11 errMsg = "Could not load Assembly: \""+ dllPath +"\"";
12 return null;
13}
14 catch (TypeLoadException)
15 {
16 errMsg = "Could not load Type: \"string\" \n from assembly: \"" + dllPath + "\"";
17 return null;
18}
19
20 MethodInfo method = type.GetMethod(methodName); // 提取方法信息
21 object obj = assembly.CreateInstance(typeName); // 创建实例
22
23 object s = method.Invoke(obj,parameters); // new object[]{"jiangli"});
24 assembly = null ;
25 type = null ;
26 method = null ;
27
从这段代码中可以看出,这是需要动态链接库的。而Java却没有,怎么用呢?这是摆在面前的一个问题。再仔细看看他的说明,他们在ASP中是这么调用的,Set Obj = Server.CreateObject("ccb.pub.RSAsig"),灵机一动,在VB中是不是也可以这么用呢?马上就就在VB中作了一个实验,结果成功了,VB中的代码是这样实现的:
Namespace test
Namespace test
Public Class cJavaClass cJava
Dim obj As Object = Nothing
Public Sub New()Sub New()
obj = GetObject("java:RSASig")
End Sub
Public Function generateKeys()Function generateKeys() As Object
Return obj.generateKeys()
End Function
Public Function getPrivateKey()Function getPrivateKey() As String
Return obj.getPrivateKey()
End Function
Public Function getPublicKey()Function getPublicKey() As String
Return obj.getPublicKey()
End Function
'签名结果信息
Public Function generateSigature()Function generateSigature(ByVal singstr As String) As String
Return obj.generateSigature(singstr)
End Function
Public Function setPublicKey()Function setPublicKey(ByVal pubKey As String) As String
Return obj.setPublicKey(pubKey)
End Function
Public Function verifySigature()Function verifySigature(ByVal orginstr As String, ByVal sigStr As String) As Object
Return obj.verifySigature(sigStr, orginstr)
End Function
End Class
End Namespace
Public Class cJavaClass cJava
Dim obj As Object = Nothing
Public Sub New()Sub New()
obj = GetObject("java:RSASig")
End Sub
Public Function generateKeys()Function generateKeys() As Object
Return obj.generateKeys()
End Function
Public Function getPrivateKey()Function getPrivateKey() As String
Return obj.getPrivateKey()
End Function
Public Function getPublicKey()Function getPublicKey() As String
Return obj.getPublicKey()
End Function
'签名结果信息
Public Function generateSigature()Function generateSigature(ByVal singstr As String) As String
Return obj.generateSigature(singstr)
End Function
Public Function setPublicKey()Function setPublicKey(ByVal pubKey As String) As String
Return obj.setPublicKey(pubKey)
End Function
Public Function verifySigature()Function verifySigature(ByVal orginstr As String, ByVal sigStr As String) As Object
Return obj.verifySigature(sigStr, orginstr)
End Function
End Class
End Namespace
于是就把它封装成类库,然后在C#中调用,OK,成功了。苦苦寻找了一个星期.net怎么调用Java类中的方法,终于在此画上了一个句号。
不知道这算不算是.net和java互操作的一个案例。希望这篇文章能对还正在苦苦寻觅.net和java互操作的朋友有点启发。
如果各位大虾还有别的更简便的方法,请指教。