所以我有一个免费注册的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?
答案 0 :(得分:0)
我见过的唯一解决方案(如果你想避免将所有类标记为MultiUse的可能的安全/维护问题)是删除“... / InProcServer32”注册表项,但该解决方法随附标准“小心搞乱注册表”警告。
答案 1 :(得分:0)
当标记为私有VB6时,COM类不会为Inproc32注册值,并且Visual Studio生成的程序集清单不完整。有些工具如Make my Manifest http://mmm4vb6.atom5.com/可以帮助您为组件创建清单