COM’s Versioning Story

COM’s versioning solution for vtable-bound clients is that every interface receives an IID and that interfaces are immutable once they are published. Once you publish the interface, you must keep it the same—no changes whatsoever. If you change an interface, then according to the COM rules you must assign it a different IID. If you assign a new IID to the interface, then you must decide what happens when a client requests an old IID. You have a choice in this case. You may decide that old clients must continue to run, in which case you do not touch the old interface. You simply create a new interface with the old methods plus your changes, and you implement both the old interface and the new interface in the component. For example, let’s say that the first version of the IAccount interface is defined as follows:

'interface IAccount version 1
Public Sub MakeDeposit(ByVal Amount As Long)
End Sub

Then the code for version 1 of the CChecking class may be the following:

'class CChecking 
Implements IAccount

Private m_Balance As Long

Private Sub IAccount_MakeDeposit(ByVal Amount As Long)
    m_Balance = m_Balance + Amount
End Sub

Let’s say that later you must change Amount to be a Double instead of a Long. Then you would define a new interface:

'Interface IAccount2 (IAccount version 2)
Public Sub MakeDeposit(ByVal Amount As Double)
End Sub

Now that there is a new interface, the new version of CChecking would support both interfaces, as follows:

'class CChecking version 2 ...

Get COM+ Programming with Visual Basic now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.