发布新版本的Tlb以及何时需要重新引用Tlb

时间:2012-02-15 12:31:59

标签: .net vba com excel-vba com-interop

我有一个C#dll并使用regasm生成tlb。我已经向使用此tlb的用户提供了实用程序电子表格。每次发布我们的应用程序的新版本时,tlb都会被注销(使用regasm.exe)。

但是,有时,当用户在新版本之后使用电子表格时,它会抛出'activex组件无法创建实例'错误,恰好在我创建类型对象的代码行上。我解决这个问题,删除并添加tlb引用。 (在vba mode-tools-reference-uncheck tlb-save-并再次添加)。然而,这很痛苦,因为我无法为所有用户执行此操作。

我做了几次测试来复制场景。就像更改dll的版本号并重新注册一样,向接口添加新方法并重新注册。但在所有情况下,电子表格都可以正常工作,而无需删除和重新添加tlb引用。

所以,我感到困惑的是,在电子表格中必须重新添加tlb作为参考的情况可能是什么原因可能是可能的原因。任何帮助表示赞赏。

谢谢, 摩尼

1 个答案:

答案 0 :(得分:2)

问题很可能是因为类型库的UUID发生了变化而VBA中的引用变得无效。

1)那边有一个人写了VBA program to add TLB references and delete invalid ones

2)这可能与您首先卸载旧版本然后安装新版本有关。 RegAsm's manual提到相反的顺序。有可能VBA有一些逻辑来自动更新它们 g ,这只能用于M $家伙想到的更新顺序。
另一种可能性是Excel在更新期间运行,因此它没有更新它的引用列表。

3)为了进一步诊断问题,我使用procmon.exe。关于COM的所有内容都会在注册表中查找,以便在出现错误时,您可能会遇到应用程序无法找到某些UUID密钥的问题。