Question

We have a problem with COM Connection point callback interfaces

In our Sample.idl we have few call-back interfaces 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;
};

Now whenever we add new interfaces as part of enhancement,this does not break the existing client, but if the enhancement has Any modifications to call-back then we endup updating the interface ISomeEvents, which is breaking existing clients, we are forced to do this because I think we can Have only one [defaut,source] Interface.

Can anyone tell me What is the workaround for this?

Regards tom

Was it helpful?

Solution

If you are developing a COM object where the client(s) are live/in production, you really shouldn't change an existing interface, any interface. That has always been the fundamental rule of COM development: "interfaces are immutable"; exceptions are made during early development, of course.

(Here's a quote for example: "COM interfaces are immutable. You cannot define a new version of an old interface and give it the same identifier." (http://msdn.microsoft.com/en-us/library/windows/desktop/ms688484(v=vs.85).aspx). Look up "interfaces are immutable" on the web for plenty more)

In this case, you should create new interfaces ISomeEvents2, ISomeEvents3, so on as needed, and have those interfaces inherit from the previous version. Make the new interface your new default source.

interface ISomeEvents1 : ISomeEvents
{
    /* new enhanced events here, for use by newly compiled clients */
}

Eventually, if you need more changes:

interface ISomeEvents2 : ISomeEvents1
{
    /* Even newer enhanced events here, for even newer clients */
}

And so on.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top