我的环境是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
有人可以请我指导解决方案吗?
答案 0 :(得分:0)
使用Oleview.exe tool检查COM对象。 我假设您的对象没有实现IDispatch接口。 如果您仍然需要使用它,您可以尝试使用Com4J library,它可以在没有IDispatch接口的情况下与COM对象进行交互。
您需要使用tlbimp.jar为COM对象创建java类文件,该文件随Com4J发行版一起提供。有关详细信息,请参阅Com4J tutorials。