1

我正在尝试使用 EXE 公开的 COM 函数。我使用 Visual Studio 2010(在 windows7/x64 机器上)创建了一个 C# 项目,并添加了对该 EXE 的引用,然后将隔离标志设置为 true。当我构建解决方案时,我得到它公开的每个类的错误。

隔离 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-F2F0414C6A13}

  • 有什么方法可以在构建时将其指向注册表中的正确位置?
  • 我可以引用一个EXE吗?到目前为止,我看到的所有示例都仅引用 DLL。
4

1 回答 1

1

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

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

最后,这种症状可能还有其他原因......

于 2014-07-24T17:41:33.553 回答