Reg Free COM - 隔离COM参考 - 缺失值'(默认)'

时间:2009-10-15 20:08:26

标签: c# .net com vb6

所以我有一个免费注册的VB6 DLL,由我的.NET 3.5程序集库引用,最终由.NET 3.5 WinForms应用程序引用(不确定它是否相关,但包含在绘制图片中)。

我收到错误'问题隔离COM引用'SomeVBDll':Registry key 'HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID\{dd1d7f58-1d6b-4370-a1b9-05c03816a128}\InProcServer32' is missing value '(Default)'

我最初的尝试是检查这个值是否确实存在,然后将其放置到位。这导致编译时出现上述相同的消息。

有没有人遇到过这个问题,知道有什么解决方法吗?

提前致谢。下面是程序集中直接引用VB6 dll的清单。

    <assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity name="Native.App.Core" version="1.0.0.0" type="win32" />
  <file name="SomeVBDll.dll" asmv2:size="184320">
    <hash xmlns="urn:schemas-microsoft-com:asm.v2">
      <dsig:Transforms>
        <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
      </dsig:Transforms>
      <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
      <dsig:DigestValue>BWWHQTqNGUupT8xznLoN3jn7S9Y=</dsig:DigestValue>
    </hash>
    <typelib tlbid="{755c1df5-d0c5-4e10-a93d-54bf186e8daf}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
    <comClass clsid="{dd1d7f58-1d6b-4370-a1b9-05c03816a128}" threadingModel="Apartment" tlbid="{755c1df5-d0c5-4e10-a93d-54bf186e8daf}" progid="SomeVBDll.MyClass" />
  </file>
</assembly>

EDIT ///

将VB6 DLL中的所有类标记为MultiUse似乎已解决了该问题。 虽然这解决了我遇到的问题并且仍然允许我使用无reg的COM,有没有人知道如何设置所有COM类Instancing到MultiUse?

2 个答案:

答案 0 :(得分:0)

我见过的唯一解决方案(如果你想避免将所有类标记为MultiUse的可能的安全/维护问题)是删除“... / InProcServer32”注册表项,但该解决方法随附标准“小心搞乱注册表”警告。

答案 1 :(得分:0)

当标记为私有VB6时,COM类不会为Inproc32注册值,并且Visual Studio生成的程序集清单不完整。有些工具如Make my Manifest http://mmm4vb6.atom5.com/可以帮助您为组件创建清单