我们遇到COM连接点回调接口问题
在我们的Sample.idl中,我们有几个回调接口ISomeEvents
interface ISomeEvents : IUnknown
{
HRESULT Event1([in]int nData);
HRESULT Event2([in]int nData);
HRESULT Event3([in]int nData);
}
And in the CoClass we have the following statement
coclass MyComp
{
[default] interface IMyInterface;
interface IMyInterFace2;
[default, source] interface ISomeEvents;
};
现在每当我们添加新接口作为增强功能的一部分时,这不会破坏现有客户端,但是如果增强功能具有 对回调的任何修改然后我们最终更新接口ISomeEvents,这破坏了现有的客户端,我们被迫这样做,因为我认为我们可以 只有一个[defaut,source]接口。
谁能告诉我这是什么解决方法?
此致 汤姆
答案 0 :(得分:1)
如果您正在开发客户端处于生产/生产状态的COM对象,那么您实际上不应该更改现有接口,任何接口。这一直是COM开发的基本规则:“接口是不可变的”;当然,在早期开发过程中会例外。
(这是一个引用例如:“COM接口是不可变的。你不能定义一个新版本的旧接口并给它相同的标识符。”(http://msdn.microsoft.com/en-us/library/windows/desktop/ms688484(v=vs.85).aspx)。查找“接口是不可变的”网络更多)
在这种情况下,您应该根据需要创建新接口ISomeEvents2
,ISomeEvents3
,并使这些接口继承先前版本。将新界面设为新的默认来源。
interface ISomeEvents1 : ISomeEvents
{
/* new enhanced events here, for use by newly compiled clients */
}
最后,如果您需要更多更改:
interface ISomeEvents2 : ISomeEvents1
{
/* Even newer enhanced events here, for even newer clients */
}
等等。