2012-02-06 53 views
4

我正在一个vb6项目,并希望创建一个清单,因此不需要注册。 我使用MMM(Make My Manifest)工具扫描VB6项目的dll依赖关系并生成清单。vb6清单添加tlb com

但是,MMM不包含tlb文件,而且我有一个用.NET编写的Client.dll和Client.tlb,它已经暴露给COM并用于我的VB6程序。

我不希望你使用Regasm,因为如果没有向注册表注册完成,它会很好。

我试图通过在命令行工具公吨,以产生用于一个单独的清单 'mt.exe -tlb:Client.tlb -dll:Client.dll -out:Client.manifest'

然后我以为我可以合并2清单通过:'mt.exe - manifest program.exe.manifest client.manifest -out:program.exe.manifest'

但是,当我运行该程序时,我得到一个消息框这说'运行时错误-2147220999(800401f9):自动化错误,错误在Dll'

我是否正确处理以上任何事情,任何人都有类似的经验,任何帮助表示赞赏。

+0

[ComVisible] .NET程序集需要清单中的''元素。 VB6工具不知道该怎么做。合并清单的最佳方式是使用文本编辑器。并写一个:http://msdn.microsoft.com/en-us/library/eew13bza%28v=VS.80%29.aspx – 2012-02-06 19:39:13

回答

3

这里是一个简短的说明UMMM是怎么做的:

  1. 首先,对于.NET的DLL它生成清单到一个临时文件,这个

    mt.exe -nologo -managedassemblyname:"{dotnet_dll}" -nodependency -out:"{dotnet_dll}.manifest" 
    
  2. 然后嵌入这个清单到.net dll中作为RT_MANIFEST资源2与此

    mt.exe -nologo -manifest "{dotnet_dll}.manifest" -outputresource:"{dotnet_dll}";2 
    
  3. 最后由NET的DLL清单提取assemblyIdentity标签并将其添加到了免费REG-清单内dependency\dependentAssembly标签这样

    <dependency> 
        <dependentAssembly> 
         <assemblyIdentity name="PdfSigner" version="1.0.0.0" processorArchitecture="msil" /> 
        </dependentAssembly> 
    </dependency> 
    

这样clrClass标签汉斯提到引用从VB6可执行NET的DLL出现在.net dll嵌入式清单中,而不是在VB6可执行文件清单中。

+0

嗨wqw,现在program.exe清单似乎拿起Client.dll嵌入表现。 但现在我得到一个错误消息框出现这就是说:运行时错误“-2146234341”(8013101b)自动化错误。 所以我认为这可能是client.dll代码相关的问题,但是当我用Client.dll执行reg.exe时,program.exe起作用。 com Client.dll使用并引用另外2个.net dll,.A.dll和一个B.dll,它们也位于与program.exe相同的目录中。 任何想法? – 2012-02-10 12:31:58

+0

当program.exe工作时,你会回答A.dll和B.dll吗? – wqw 2012-02-10 17:25:25

+0

你把Net DLL的Client.dll依赖于* VB6可执行文件*所在的文件夹吗?你几乎可以肯定的错误是一个简单的路径查找错误。使用fuslogvw.exe(来自windows7.1 SDK)和sxstrace.exe来解决这个问题。 – Dabblernl 2012-02-11 13:13:40