COM Standard Interfaces: IUnknown and IDispatch

So far you have seen how interfaces are represented in memory and what an object like CChecking looks like in memory when it has a single interface, the default interface. Let’s shift now to the case in which a developer adds functionality to the CChecking class by defining another interface, IAccount, and implementing the interface in the object. The following code shows how a developer might do this:

' Class IAccount

Option Explicit

Public Property Get Balance(  ) As Currency
End Property

Public Sub MakeDeposit(ByVal Amount As Currency)
End Sub

' Class CChecking
Option Explicit
Implements IAccount

Private m_cBalance As Currency

Private Property Get IAccount_Balance(  ) As Currency
    Balance = m_cBalance
End Property

Private Sub IAccount_MakeDeposit(ByVal Amount As Currency)
    m_cBalance = m_cBalance + Amount
End Sub

The client code using this code would look like the following:

Dim Acct As IAccount
Set Acct = new CChecking
Call Acct.MakeDeposit(5000)
Set Acct = Nothing

What VB does in this case is a little different. When the object is allocated in memory on the server side, VB builds two vtables. One vtable contains the public members of the _CChecking default interface. As it is right now, there are no public functions in CChecking. Nonetheless, if there were, then they would be part of a vtable. When VB sees the Implements statement in the server code, VB allocates a separate vtable to contain the public functions for the IAccount interface. ...

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

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.