com.jacob.com.ComFailException: Can't co-create object解决办法

在使用jacob调用VB.NET写的dll时,总是报错
com.jacob.com.ComFailException: Can't co-create object
at com.jacob.com.Dispatch.createInstanceNative(Native Method)
at com.jacob.com.Dispatch.(Dispatch.java:99)
at com.jacob.samples.test.CallDll.JavaCallVbdll(CallDll.java:19)
at com.jacob.samples.test.CallDll.main(CallDll.java:13)

网上找到几种解决办法:
1.没有释放com线程或者干脆没有使用com线程控制。因此解决方案即:释放com线程(ComThread.Release();)。因此修改代码为
public static String JavaCallVbdll(String str){
ComThread.InitSTA();
String res="";
try {
Dispatch test = new Dispatch("TestDLL.ComClass1");
Variant result = Dispatch.call(test, "teststr", str);
res=result.toString();
}catch (Exception e) {
res="";
e.printStackTrace();
}finally {
ComThread.Release();
}
return res;
}

对不起,不成功!!!!
2.在系统的服务进程中,找到“DCom Server Process Launcher”这个服务选项,请确认这个服务是关闭着的,还是开启的。
http://babystudyjava.iteye.com/blog/1746597
不好意思,我们开着呢!!!
3.JDK与JACOB版本对应,我的JDK是1.7,JACOB是1.17,电脑是win10,都是64位的。
奔溃,各版本都试过!!!
4.jar和dll文件版本需对应,jar包是64位的,dll文件是同事开发的,所以就去询问同事给我的是什么版本的dll,同事当时不造。。。

后来在Google找到一篇帖子说在VB.NET中编译选择的平台如果是Any CPU,那么久意味着生成的dll文件是32位的。没想到我们的dll文件真的是这样编译的!com.jacob.com.ComFailException: Can't co-create object解决办法_第1张图片
如上图:将Any CPU换成x64重新编译就可以了。

如此问题就解决了!!!

你可能感兴趣的:(jacob,vb,dll)