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 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.