使用vb.NET实现VB6中COM的无注册DLL

4
我试图在64位Windows7上实现最简单的无需注册COM项目!该COM组件还是最简单的vb.NET DLL,当其注册后,从VB6 EXE正常运行。

请问有人能建议一下为什么清单文件没有起作用吗?

我已经尝试使用mt.exe更新任何VB6内部清单,但是一般错误指示Project2.exe中没有内部清单。

VB6程序(Project2.exe)的清单是....

    <assemblyIdentity name="Project2.exe" version="1.0.0.0" type="win32"    processorArchitecture="x86"/>

    <dependency>
     <dependentAssembly>
      <assemblyIdentity name="ClassLibrary1" version="1.0.0.0" type="win32"/>
     </dependentAssembly>
    </dependency>

    </assembly>

而 DLL(ClassLibrary1.dll)的清单是......
    <assemblyIdentity name="ClassLibrary1" version="1.0.0.0" type="win32"/>

    <clrClass
       name="ClassLibrary1.Class1"
       clsid="{D9531C2A-3822-4222-8D45-BC507FCDF5F3}"
       progid="ClassLibrary1.Class1"
       threadingModel="Both"/>

    <file name="ClassLibrary1.tlb">
     <typelib
         tlbid="{DA8A00C1-1E14-4295-AEDE-F8F23DD8E43D}"
         version="1.0"
         helpdir=""
         flags="hasdiskimage"/>
    </file>

    </assembly>

鸡和蛋问题。EXE从清单中找到DLL。因此,您的DLL清单条目应放在EXE清单中。 - Hans Passant
我不确定那是否是问题所在。在应用程序清单中嵌入库信息是一种捷径,而且我不确定微软甚至在任何地方都有记录。一个单独的程序集清单是更“正常”的情况。即使是古老的(~2004年)MMM实用程序版本也用于创建单独的程序集清单,并且它们可以正常工作。 - Bob77
您的程序集清单中是否缺少 <?xml ?> 指令? - Bob77
回答这个问题可能会有所帮助:https://dev59.com/7WDVa4cB1Zd3GeqPaBxm - wqw
可能是在VB6清单中包含.NET程序集?的重复问题。 - StayOnTarget
显示剩余5条评论
1个回答

2
“假设ID正确,清单就是正确的。所以你的问题是其他方面出了问题。你收到什么错误信息?”
“我成功地使用RegFree Com,并且一旦你有正确的清单,它可以帮你省去无数麻烦。我不会嵌入它们。我使用Maze软件的Side-by-Side Manifest Maker,他们非常乐于助人,非常值得投资。我粘贴了应用程序清单和其中一个dll的清单,以便给你一个工作示例。”
“文件名=MyVB6App.exe.Manifest(注意.exe标记)”
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity name="MyVB6App.exe" version="2.8.0.127" type="win32" processorArchitecture="x86"/>
<description>Built with: Side-by-Side Manifest Maker (3.7.1.4434) (x86)</description>

<dependency>
 <dependentAssembly>
  <assemblyIdentity name="MyNetComWrapper" version="1.0.24.0" type="win32" publicKeyToken="6ABF096D69195FE6"/>
 </dependentAssembly>
</dependency>

</assembly>

文件名=MyNetComWrapper.Manifest(请注意没有.dll标记)

<assemblyIdentity name="MyNetComWrapper" version="1.0.24.0" type="win32" publicKeyToken="6ABF096D69195FE6"/>

<description>Built with: Side-by-Side Manifest Maker (3.7.1.4434) (x86)</description>

<clrClass
   name="MyComNetWrapper.SomeClass"
   clsid="{A68F56A1-8425-3E06-BA83-856EC8422F5B}"
   progid="MyComNetWrapper.SomeClass"
   runtimeVersion="v4.0.30319"
   threadingModel="Both"/>
<clrClass
   name="MyComNetWrapper.SomeOtherClass"
   clsid="{D5156DAF-0421-36AE-84B6-5D915068B2DC}"
   progid="MyComNetWrapperc.SomeOtherClass"
   runtimeVersion="v4.0.30319"
   threadingModel="Both"/>

<file name="MyComNetWrapper.tlb">
 <typelib
     tlbid="{D189D056-66F1-4C01-8EB9-1F95BA11254A}"
     version="1.0"
     helpdir=""
     flags="hasdiskimage"/>
</file>

</assembly>

请再次阅读原帖的问题,@tcarvin :-) - Dabblernl
是的,我现在看到了,因为我已经喝了一些咖啡。 - tcarvin
我曾使用Maze软件生成清单。可惜的是,在为我们的完整应用程序提供一些初始帮助后,Maze的支持就停止了。然后,我为这个论坛生成了最简单的VB6项目和VB.NET程序集DLL。 - Richard Bridger
有什么可能会阻止“Registration Free COM”正常工作的因素吗? - Richard Bridger
1
好的,这个答案解决了问题:https://dev59.com/q2gu5IYBdhLWcg3wP0xm。 - Richard Bridger
显示剩余13条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接