2012-01-18 79 views
1

我试图使用由EXE公开的COM函数。我已经使用Visual Studio 2010(在Windows7/x64机器上)创建了一个C#项目,并添加了对该EXE的引用,然后将Isolated标志设置为true。当我构建解决方案时,我得到了它公开的每个类的错误。注册与EXE的免费COM错误

问题隔离COM参考 'FNCClient11Lib':注册表 键 'HKEY_CURRENT_USER \ Software \ Classes下\ CLSID {e49b30c9-6d7e-48f5-91da-f2f0414c6a13} \ InProcServer32中' 缺失值(默认)“。

这些记录并不在该位置的注册表中存在,但在这里(下图)

HKEY_CURRENT_USER \ Software \ Classes下\ Wow6432Node \ CLSID {E49B30C9-6D7E-48F5-91DA-DO F2F0414C6A13存在}

  • 有什么办法建立的时候我可以指出这在注册表中的位置是否正确?
  • 我可以参考一个EXE吗?到目前为止,我所见过的所有例子都只引用了DLL。
+0

就意识到,我也越来越警告“问题隔离COM引用‘FNCClient11Lib’:进程的服务器不支持” – 2012-01-18 18:30:58

+1

可能[是否有免费注册COM组件的激活方法](http://stackoverflow.com/questions/1026202/is-there-a-way-for-registration-free-activation-of-com-componets) – 2012-01-18 18:54:15

+0

我认为你是对的汉斯。谢谢 – 2012-01-19 14:30:59

回答

0

当类型库包含在COM接口中标记为'uncreatable'的类时,会出现此问题。您可以通过使用OLE/COM查看器(作为管理员),导航到导致问题的类型库,打开它并查找CoClass定义来检查此问题。如果使用报告的uuid的人被宣布为“不可创作”,那么你就知道了。此外,在VS对象浏览器中,这些类不在接口中公开构造函数。

我的解决方案是用这些类的公共构造函数重新构建COM组件,但当然这只有在拥有源代码时才有可能。

最后,可能还有其他的原因,这种现象虽然...