Java 雅各布可以';IDispatch的t QI对象

Java 雅各布可以';IDispatch的t QI对象,java,eclipse,com,jacob,Java,Eclipse,Com,Jacob,我的环境是Java8,在Windows7-64位上。这是我的要求和我遵循的程序 java:java版本“1.8.0131”32位 jacob:jacob-1.18-x86.dll和jacob.jar 我使用eclipse运行以下代码。它运行得很好 import com.jacob.com.*; import com.jacob.activeX.*; public class DispatchTest { public static void main(String[] args) {

我的环境是Java8,在Windows7-64位上。这是我的要求和我遵循的程序 java:java版本“1.8.0131”32位 jacob:jacob-1.18-x86.dll和jacob.jar

我使用eclipse运行以下代码。它运行得很好

import com.jacob.com.*;
import com.jacob.activeX.*;
public class DispatchTest {
    public static void main(String[] args) {
        ActiveXComponent xl = new ActiveXComponent("Execl.Application");
        Dispatch xlo = (Dispatch)(xl.getObject());
        try {
            System.out.println("version="+xl.getProperty("Version"));
            System.out.println("version="+Dispatch.get(xlo, "Version"));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            xl.invoke("Quit", new Variant[] {});
        }
    }
}
当我尝试使用第三方dll时,遇到以下执行选项:

import com.jacob.com.*;
import com.jacob.activeX.*;
public class DispatchTest {
    public static void main(String[] args) {
        ActiveXComponent xl = new ActiveXComponent("ProjectParser.1");
        Dispatch xlo = (Dispatch)(xl.getObject());
        try {
            System.out.println("version="+xl.getProperty("Version"));
            System.out.println("version="+Dispatch.get(xlo, "Version"));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            xl.invoke("Quit", new Variant[] {});
        }
    }
}

Exception in thread "main" com.jacob.com.ComFailException: Can't QI object for IDispatch
    at com.jacob.com.Dispatch.createInstanceNative(Native Method)
    at com.jacob.com.Dispatch.<init>(Dispatch.java:99)
    at com.jacob.activeX.ActiveXComponent.<init>(ActiveXComponent.java:58)
    at DispatchTest.main(DispatchTest.java:5)
import com.jacob.com.*;
导入com.jacob.activeX.*;
公共类调度测试{
公共静态void main(字符串[]args){
ActiveXComponent xl=新的ActiveXComponent(“ProjectParser.1”);
Dispatch xlo=(Dispatch)(xl.getObject());
试一试{
System.out.println(“version=“+xl.getProperty(“version”);
System.out.println(“version=“+Dispatch.get(xlo,“version”));
}捕获(例外e){
e、 printStackTrace();
}最后{
调用(“Quit”,新变量[]{});
}
}
}
线程“main”com.jacob.com.ComFailException中的异常:无法为IDispatch设置QI对象
位于com.jacob.com.Dispatch.createInstancential(本机方法)
在com.jacob.com.Dispatch.(Dispatch.java:99)
位于com.jacob.activeX.ActiveXComponent(ActiveXComponent.java:58)
位于DispatchTest.main(DispatchTest.java:5)

有人能帮我找到解决方案吗?

请检查您的COM对象。 我假设您的对象没有实现IDispatch接口。 如果您仍然需要使用它,可以尝试使用它,它可以在没有IDispatch接口的情况下与COM对象交互

您需要使用Com4J发行版附带的tlbimp.jar为COM对象创建java类文件。有关更多信息,请参阅