2012-02-06 90 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