0% found this document useful (0 votes)
89 views

COM Interview Questions: Object? Aggregation Is The Reuse Mechanism, in Which The Outer Object Exposes

IUnknown is the base interface of COM that provides AddRef, Release, and QueryInterface methods. QueryInterface returns E_NOINTERFACE if the requested interface is not found. CoCreateInstance creates a local in-process COM object using a class factory. Limitations include only creating one object locally. Aggregation exposes an inner object's interfaces through the outer object. Marshalling copies an object's static state to the caller for more efficient remote calls.

Uploaded by

Kundan Bhati
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
89 views

COM Interview Questions: Object? Aggregation Is The Reuse Mechanism, in Which The Outer Object Exposes

IUnknown is the base interface of COM that provides AddRef, Release, and QueryInterface methods. QueryInterface returns E_NOINTERFACE if the requested interface is not found. CoCreateInstance creates a local in-process COM object using a class factory. Limitations include only creating one object locally. Aggregation exposes an inner object's interfaces through the outer object. Marshalling copies an object's static state to the caller for more efficient remote calls.

Uploaded by

Kundan Bhati
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

COM Interview Questions

Introduction

1. What is IUnknown? What methods are provided by IUnknown? It is a


generally good idea to have an answer for this question if you claim you know COM
in your resume. Otherwise, you may consider your interview failed at this point.
IUnknown is the base interface of COM. All other interfaces must derive directly or
indirectly from IUnknown. There are three methods in that interface: AddRef,
Release and QueryInterface.
2. What are the purposes of AddRef, Release and QueryInterface functions?
AddRef increments reference count of the object, Release decrements reference
counter of the object and QueryInterface obtains a pointer to the requested
interface.
3. What should QueryInterface functions do if requested object was not found?
Return E_NOINTERFACE and nullify its out parameter.
4. How can would you create an instance of the object in COM? Well, it all
depends on your project. Start your answer from CoCreateInstance or
CoCreateInstanceEx, explain the difference between them. If interviewer is still not
satisfied, you�ll have to explain the whole kitchen behind the scenes, including a
difference between local server and inproc server, meaning and mechanism of class
factory, etc. You may also mention other methods of object creation like
CoGetInstanceFromFile, but discussion will likely turn to discussion of monikers then.
5. What happens when client calls CoCreateInstance? Again, all depends on the
level of detail and expertise of interviewer. Start with simple explanation of class
object and class factory mechanism. Further details would depend on a specific
situation.
6. What the limitations of CoCreateInstance? Well, the major problems with
CoCreateInstance is that it is only able to create one object and only on local system.
To create a remote object or to get several objects, based on single CLSID, at the
same time, one should use CoCreateInstanceEx.
7. What is aggregation? How can we get an interface of the aggregated
object? Aggregation is the reuse mechanism, in which the outer object exposes
interfaces from the inner object as if they were implemented on the outer object
itself. This is useful when the outer object would always delegate every call to one of
its interfaces to the same interface in the inner object. Aggregation is actually a
specialized case of containment/delegation, and is available as a convenience to
avoid extra implementation overhead in the outer object in these cases. We can get
a pointer to the inner interface, calling QueryInterface of the outer object with IID of
the inner interface.
8. C is aggregated by B, which in turn aggregated by A. Our client requested C.
What will happen? QueryInterface to A will delegate request to B which, in turn,
will delegate request for the interface to C. This pointer will be returned to the client.
9. What is a moniker ? An object that implements the IMoniker interface. A moniker
acts as a name that uniquely identifies a COM object. In the same way that a path
identifies a file in the file system, a moniker identifies a COM object in the directory
namespace.
10. What�s the difference, if any, between OLE and COM? OLE is build on top of
COM. The question is not strict, because OLE was built over COM for years, while
COM as a technology was presented by Microsoft a few years ago. You may mention
also that COM is a specification, while OLE is a particular implementation of this
specification, which in today�s world is not exactly true as well, because what
people call COM today is likely implementation of COM spec by Microsoft.
11. What�s the difference between COM and DCOM? Again, the question does not
require strict answer. Any DCOM object is yet a COM object (DCOM extends COM)
and any COM object may participate in DCOM transactions. DCOM introduced several
improvements/optimizations for distributed environment, such as MULTI_QI
(multiple QueryInterface()), security contexts etc. DCOM demonstrated importance
of surrogate process (you cannot run in-proc server on a remote machine. You need
a surrogate process to do that.) DCOM introduced a load balancing.
12. What is a dual interface? Dual interface is one that supports both - IDispatch
interface and vtbl-based interface. Therefore, it might be used in scripting
environment like VBScript and yet to use power and speed of vtbl-based interface for
non-scripting environment. Discussion then may easily transform into analyzing of
dual interface problems - be prepared to this twist.
13. Can you have two dual interfaces in one class? Yes. You may have two dual
interfaces in one class, but only one of them may be default. The bottom line is that
you cannot work with two dual interfaces at the same time due to nature of dual
interface! To support two dual interfaces in VB you would write something like:

Collapse Copy Code

dim d1 as IDualInterface1
dim d2 as IDualInterface2
set d1 = new MyClassWithTwoDuals
set d2 = d1

In ATL�s class you would have to use macro COM_INTERFACE_ENTRY2(IDispatch,


IDualInterface1), to distinguish between different dual interfaces.

14. What is marshalling by value? Some objects can essentially be considered static:
regardless of which methods are called, the state of the object does not change.
Instead of accessing such an object remotely, it is possible to copy the static state of
the object and create a new object with the same state information on the caller
side. The caller won�t be able to notice the difference, but calls will be more
efficient because they do not involve network round trips. This is called �marshaling
by value�.
15. What is a multi-threaded apartment (MTA)? Single-threaded apartment
(STA)? This is pretty difficult question to describe shortly. Anyway, apartments were
introduced by Microsoft in NT 3.51 and late Windows 95 to isolate the problem of
running legacy non-thread safe code into multithreaded environment. Each thread
was �encapsulated� into so called single-threaded apartment. The reason to create
an object in apartment is thread-safety. COM is responsible synchronize access to
the object even if the object inside of the apartment is not thread-safe.
Multithreaded apartments (MTA, or free threading apartment) were introduced in NT
4.0. Idea behind MTA is that COM is not responsible to synchronize object calls
between threads. In MTA the developer is responsible for that. See �Professional
DCOM Programming� of Dr. Grimes et al. or �Essential COM� of Don Box for the
further discussion on this topic.
16. Let�s assume we have object B and aggregated object C (in-proc server),
created by B. Can you access any interface of B from C? What�s the
difference between aggregated and contained objects? Yes, you can. This is
fundamental postulate of COM: �If you can get there from here, you can get there
from anywhere�, i.e. QI�ing for IUnknown you may proceed and to get a pointer to
any other interface, supported by the object. Aggregated object exposes its interface
directly, without visible intervention of the object container. Contained object is
created within the object container and its interfaces might be altered or filtered by
the object container.
17. What is ROT ? GIT ? Count pros and cons of both. By definition, running object
table (ROT) is a globally accessible table on each computer that keeps track of all
COM objects in the running state that can be identified by a moniker. Moniker
providers register an object in the table, which increments the object�s reference
count. Before the object can be destroyed, its moniker must be released from the
table. Global Interface Table (GIT) allows any apartment (either single- or multi-
threaded) in a process to get access to an interface implemented on an object in
any other apartment in the process.
18. If you have an object with two interfaces, can you custom marshal one of
them? No! The decision to use custom marshaling is an all-or-nothing decision; an
object has to custom marshal all its interfaces or none of them.
19. Is there a way to register in-proc server without regsvr32.exe? Yes. Call
DllRegisterServer() from the client. Do not forget to call DLLUnregisterServer() from
the same client. You may also use Registrar object for the same purpose or use
direct manipulation of the windows registry.
20. What is VARIANT? Why and where would you use it? VARIANT is a huge union
containing automation type. This allows easy conversion of one automation type to
another. The biggest disadvantage of VARIANT is size of the union.
21. How can you guarantee that only remote server is ever created by a client?
Create an object (call CoCreateObjectEx()) with CLSCTX_REMOTE_SERVER flag.
22. What is __declspec(novtable)? Why would you need this? __declspec(novtable)
is a Microsoft�s compiler optimization. The main idea of this optimization is to strip
the vtable initialization code from abstract class (for abstract class the vtable is
empty, while it is initialized in contructor)
23. What is an IDL? IDL stands for Interface Definition Language. IDL is the language
to describe COM interfaces.
24. What is In-proc? In-proc is in-process COM object, i.e. COM object that
implemented as DLL and supposed to be hosted by a container. When you have to
instantiate the in-proc object remotely, you may use DLLHost.exe application that
was design specially for this purpose.
25. What is OLE? OLE is an object and embedding first implementation of COM spec
available from MS before COM was officially named COM.
26. Give examples of OLE usage. The most famous examples are probably drag and
drop and structured storage implementations.
27. What are 2 storage types for composite document? Storage and Stream.
28. Is .doc document a compound document? Is it a structured storage?
Compound document is a document that contains information about other
documents hosted in this document. All office documents _may_ be compound
documents, but may be not. Word documents from version 6.0 and up are stored as
structured storage.

You might also like