我需要知道客户端应用程序需要重建的场景,我很少,如果有任何其他场景让我知道。
1)我将一个新的接口添加到现有的CoClass中,并且它的方法构建新的dll并将其复制到客户端机器中,是否需要重建客户端应用程序。
2)我将一个新的CoClass和接口和方法添加到一个exisiing DLL项目中构建新的dll并将其复制到客户端机器中,是否需要重建客户端应用程序。
所以我的问题是,是否需要旧客户重建,假设他们不需要新功能?
注意:所有客户端应用程序新旧都是.NET客户端,因此有一个.NET Interop层(无论如何需要更改)但是旧客户端呢
感谢您的帮助
此致
尼尔
答案 0 :(得分:0)
我假设后期绑定是客户端使用COM服务器的首选方式。对现有接口的任何更改都要求接口获取不同的IID。一个非常重要的DLL地狱对策。这种更改包括插入或删除方法以及更改现有方法的任何参数。 IID的更改需要重建客户端,因此它知道使用新的IID。
不破坏客户的更改:
将方法附加到接口的末尾。在这种情况下不改变IID是有风险的,但改变是向前兼容的。由于客户端尚不知道该方法存在。但是,只要将其更改为利用该方法,它就不再向后兼容。如果它与旧版本的COM服务器一起运行并使用早期绑定,则会严重崩溃。如果您可以严格控制服务器和客户端的部署,那么只考虑这一点,这不是很常见。强烈建议更改IID。
向coclass添加接口。这是向前兼容的,客户端还不知道新的界面。直到它被修改以利用它。使用旧版本运行可提供合理的诊断,E_NOINTERFACE。
添加新的coclass。前向兼容,就像前一个子弹一样。使用旧版本运行会生成REGDB_E_CLASSNOTREG诊断。
因此,您提供的两个子弹实际上是不的原因,必须重新编译客户端。