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

RegAsm注册DLL组件使用jacob调用的问题com.jacob.com.ComFailException: Can't co-create object

2015-11-29 14:18 453 查看
线上一个项目使用了到jacob调用dll文件,由于最近客户迁移到了私有云环境中,服务器的操作系统从32位的换成了64位的,使用RegAsm注册的时候,提示说不是有效的win程序,就想到了是因为操作系统的位数换了,所以从新在新版的vs上面重新生成了下dll文件,在注册就ok了。

没想到过了一段时间后,客户反应项目的某个功能不能正常使用了,经过查看日志发现是java在通过jacob调用dll文件的时候,提示com.jacob.com.ComFailException: Can't co-create object,当时就郁闷啊,这明明迁移过来的时候好好的,跟其他同事确认了下,他们最近也没有去改变服务器的环境啥的。然后我尝试着吧dll卸载了重新注册,再试还是一样的错误。百度了下,比较多的是2中情况:

1.确认“DCom Server Process Launcher”这个服务选项默认是运行的。

2.确认在java代码中,通过jacob调用的ProgId和你注册的dll的ProgId是一致的

通过检查,发现不符合上面的情况,后来有尝试着用管理员权限的cmd来注册dll,调用还是一样的错误,在windos/system32下面注册又报错,大意是无法调用依赖啥的,于是想着配置RegAsm的环境变量试试,进入到对应的目录后,我猛然发现,注册也分32和64位的。。。



我一直进入的是默认的Framework目录下面的v4版本的RegAsm,于是换成64位的注册,再试项目功能正常了。后来想了下,有可能是因为服务器开启了update,导致服务器的环境发生了变化。

附带RegAsm的常用命令:

RegAsm /u dllFileName 卸载注册的dll

RegAsm dllFileName /tlb:tlbFileName 注册dll文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: