jacob无法为IDispatch提供QI对象

时间:2017-06-18 08:39:29

标签: java eclipse com jacob

我的环境是Java 8,在Windows 7 - 64位上。所以这是我遵循的要求和程序 java:java版“1.8.0_131”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)

https://github.com/joval/jacob/blob/master/jni/Dispatch.cpp

有人可以请我指导解决方案吗?

1 个答案:

答案 0 :(得分:0)

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

您需要使用tlbimp.jar为COM对象创建java类文件,该文件随Com4J发行版一起提供。有关详细信息,请参阅Com4J tutorials