Visual c++ 客户端应用程序需要重建的场景

Visual c++ 客户端应用程序需要重建的场景,visual-c++,com,atl,Visual C++,Com,Atl,我需要知道客户端应用程序需要重建的场景,我只有很少的场景,如果还有其他场景,请告诉我 1) 我将一个新接口添加到一个现有的CoClass中,其方法构建新的dll并将其复制到客户机中,客户机应用程序是否需要重建 2) 我向一个现有的DLL项目添加了一个新的类、接口和方法,构建新的DLL并将其复制到客户机中,客户机应用程序是否需要重建 所以我的问题是,假设旧客户机不需要新功能,那么它们是否需要重建 注意:所有新的和旧的客户端应用程序都是.NET客户端,因此有一个.NET互操作层(无论如何都需要更改)

我需要知道客户端应用程序需要重建的场景,我只有很少的场景,如果还有其他场景,请告诉我

1) 我将一个新接口添加到一个现有的CoClass中,其方法构建新的dll并将其复制到客户机中,客户机应用程序是否需要重建

2) 我向一个现有的DLL项目添加了一个新的类、接口和方法,构建新的DLL并将其复制到客户机中,客户机应用程序是否需要重建

所以我的问题是,假设旧客户机不需要新功能,那么它们是否需要重建

注意:所有新的和旧的客户端应用程序都是.NET客户端,因此有一个.NET互操作层(无论如何都需要更改),但是旧客户端呢

谢谢你的帮助

问候


Neil

我假设延迟绑定是客户端使用COM服务器的首选方式。对现有接口的任何更改都需要该接口获取不同的IID。一个非常重要的对策。这种更改包括插入或删除方法以及更改现有方法的任何参数。IID中的更改需要重建客户端,以便它知道如何使用新的IID

不会中断客户端的更改:

  • 将方法追加到接口的末尾。在这种情况下,不更改IID是有风险的,但前提是更改是向前兼容的。因为客户端还不知道该方法存在。但是,一旦更改它以利用该方法,它就不再向后兼容。如果它与旧版本的COM服务器一起运行并使用早期绑定,则会严重崩溃。只有当您能够严格控制服务器和客户机的部署时,才能考虑这一点,这并不常见。强烈建议更改IID

  • 向coclass添加接口。这是向前兼容的,同样地,客户端还不知道新接口。直到它被修改以利用它。使用旧版本运行提供了一个合理的诊断界面

  • 添加一个新的coclass。向前兼容,与前一个项目符号相同。使用旧版本运行会生成REGDB_E_CLASSNOTREG诊断

因此,您给出的两个项目实际上不是重新编译客户端的理由