您的位置:首页 > 移动开发 > Objective-C

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

2016-02-26 15:13 686 查看
在使用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.<init>(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”这个服务选项,请确认这个服务是关闭着的,还是开启的。

/article/4397755.html

不好意思,我们开着呢!!!

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文件真的是这样编译的!


如上图:将Any CPU换成x64重新编译就可以了。

如此问题就解决了!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: