我可以在程序集之间移动COM类吗?

时间:2013-02-11 19:26:36

标签: .net com-interop

我有一个程序集通过ComVisible向COM公开接口和类。该类由VB6应用程序使用。

现在,由于一些重组,我希望这个类由不同的程序集提供。只要我保留Guid和ProgID,我可以将代码移动到这个新程序集,注册它,让VB6应用程序找到该类而不必重新编译它吗?

2 个答案:

答案 0 :(得分:2)

  

只要我保留Guid和ProgID

小心,有 Guids ,复数。您至少有一个用于接口类型,IID,以及一个用于实现接口的类CLSID。如果您支持事件或在程序集中具有多个接口或类,则为其他附加的。如果您还注册了类型库(Regasm.exe / tlb选项),那么您还有一个用于类型库TLBID的程序集本身的guid。

获取其中任何一个错误,或依赖.NET自动生成它们,替换将无法正常工作。

确保替换的最佳方法是对类型库进行反编译并将其进行比较以确定其身份。从Visual Studio命令提示符,如果尚未使用Tlbexp.exe,则首先生成类型库。然后运行Oleview.exe,File + View Typelib获取类型库的内容,反编译为IDL。将右窗格内容复制/粘贴到文本文件中。重复替换DLL并进行比较。不要担心评论中的差异。

答案 1 :(得分:1)

是的,我不明白为什么不...只是确保旧装配已正确注销。