我们正在考虑通过 COM 向 C++ 客户端公开一些 C# 类型。在项目的整个生命周期中,我们预计会遇到哪些问题?例如,如何管理版本控制?
在版本控制中,从阅读本文看来,我们应该装饰我们的类型以暴露[ClassInterface(ClassInterfaceType.None)]
并使用显式接口。这样,我假设我们完全控制将公开给 COM 客户端的接口。
提前致谢。
我们正在考虑通过 COM 向 C++ 客户端公开一些 C# 类型。在项目的整个生命周期中,我们预计会遇到哪些问题?例如,如何管理版本控制?
在版本控制中,从阅读本文看来,我们应该装饰我们的类型以暴露[ClassInterface(ClassInterfaceType.None)]
并使用显式接口。这样,我假设我们完全控制将公开给 COM 客户端的接口。
提前致谢。
由于您使用的是 C++ 客户端,因此您绝对应该使用显式接口进行早期绑定。Dispatch 接口在使用脚本客户端(如 VBS)时很有用,但它们对 C++ 客户端很少有用。
对接口进行版本化的唯一方法是创建一个新接口(可能从原始接口继承)。使用显式接口时,您可以完全控制此过程。
这意味着您应该为打算通过 COM 公开的每个类创建一个接口。不要忘记用 ComVisible 和 Guid 属性标记每个接口和类。此外,您的所有类都必须有一个默认构造函数。
您必须阅读 GUID 属性(包括此属性)以保持二进制兼容性并仅在必要时重建客户端。
此外,您可能对有助于减少注册表污染的 ComVisible 属性感兴趣。
要完全控制 COM 接口,请在 MIDL 中定义它们。在 C++ 项目中使用这些接口构建类型库,然后将类型库导入 C# 并实现接口。
这种方法对于编组不是微不足道的复杂接口很有用。
版本应该以 COM 样式完成,更改 GUID 并添加新的或继承的接口。