该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一个java的项目中遇到一个问题。必须使用第三方提供的一个.net 写的dll。 解决的思路是用C#写一个com,实现好功能后给java调用,java通过jacob来调用com。
写了一个测试的COM,用vbs调用成功。通过jacob调用时提示
com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: GetEncrypt
Description: 不支持此接口
at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.com.Dispatch.invokev(Dispatch.java:858)
at com.jacob.com.Dispatch.callN(Dispatch.java:455)
at com.jacob.com.Dispatch.call(Dispatch.java:544)
at test.main(test.java:20)
不知道是我的COM写的有问题,还是jacob 本身就不支持调用.net做的COM? 还望高手指点。
-----------------C# COM 代码------------------------
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);
}
[Guid("33A6E58D-E1F5-4b53-B2E2-03B9F8BA2FAD"), ClassInterface(ClassInterfaceType.None)]
public class Encrypt:IEncrypt
{
public Encrypt(){}
public string GetEncrypt(string str)
{
return "测试 | "+str;
}
}
}
-------------------java 调用-------------------
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;
Dispatch wordDoc = null;
dotnetCom = new ActiveXComponent("TestCom.Encrypt");
Dispatch.call(dotnetCom,"GetEncrypt",new Object[] { "我们在测试" });
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
-----------vbs 调用成功---------------
Dim obj
Set obj = CreateObject("TestCom.Encrypt")
MsgBox obj.GetEncrypt("aaa")
---------------------------------------