2012-02-15 26 views
2

我有一個C#dll並使用regasm生成一個tlb。我已經給使用此tlb的用戶提供了實用程序電子表格。每次發佈我們的應用程序的新版本時,tlb都是未註冊和註冊的(使用regasm.exe)。發佈新版本的Tlb以及何時需要重新引用Tlb

但是,有時,當用戶在新版本之後使用電子表格時,它會拋出'activex組件無法創建實例'的錯誤,恰好在創建類型對象的代碼行上。我解決了這個問題,刪除並添加了tlb參考。 (在vba mode-tools-reference中取消選中tlb-save並再次添加)。然而,這是痛苦的,因爲我無法爲所有用戶做到這一點。

我做了幾個測試來複制場景。就像更改dll的版本號並重新註冊一樣,向接口添加新的方法並重新註冊。但在所有情況下,電子表格都可以正常工作,無需移除並重新添加tlb引用。

所以,我很困惑,在電子表格中必須重新添加tlb作爲參考,以及可能的原因是什麼。任何幫助表示讚賞。

感謝, 瑪尼

回答

2

的問題很可能是由該類型庫的變化UUID和VBA中的引用變爲無效的事實引起的。

1)那邊有個人寫了VBA program to add TLB references and delete invalid ones

2)這可能與您先卸載舊版本然後安裝新版本有關。 RegAsm's manual提到相反的順序。有可能VBA有一些邏輯來更新它們automa g從理論上講,這隻適用於M $傢伙想要的更新訂單。
另一種可能是Excel在更新過程中正在運行,所以它在應該時不會更新其引用列表。

3)爲了進一步診斷問題,我使用procmon.exe。關於COM的一切都在註冊表中查找,所以如果出現錯誤,您可能會遇到該應用無法找到某個UUID密鑰。

+0

絕對有用,upvoting。 – 2012-10-08 16:10:24

+0

並接受它作爲答案,因爲我看不到任何其他可能的原因,爲什麼會發生這種情況。該工具很有用,procmon很有幫助。但是,仍然不確定這一解決方案可以解決這個問題。 – 2012-10-08 16:25:38