Re: How to access COM objects' internal data?
Boris <boris@gtemail.net> wrote:
ATL provides a couple of helpful classes like ICollectionOnSTLImpl
which can be used to easily implement a collection based on a C++
container. If a COM object is derived from ICollectionOnSTLImpl the
member m_coll is available in the COM object to store C++ container
items. What I wonder now is how do I populate this internal C++
container correctly in the COM world?
Normally, you would have a class derived from ICollectionOnSTLImpl, and
this class can directly access m_coll member. ICollectionOnSTLImpl is
not a COM object, it's just a library class that helps you implement
one.
Somewhere member functions must be provided to add/remove the items
which have to be stored in the C++ container:
- If these functions are added to the COM interface implemented by
the COM object it might not be Automation-compatible anymore.
Why? You are the one defining these methods. If you want them to be
automation compatible, design them this way.
Furthermore users of the library will see functions which are meant
only to be used internally.
I don't understand. If you don't want them publicly available, don't
expose them on a public COM interface. What again seems to be the
problem?
- If the functions are not added to the COM interface but to the COM
object only other COM objects have to assume that a COM interface is
provided by a very specific COM object - which hopefully provides the
add/remove functions to access the internal C++ container. That seems
to contradict the whole idea of COM that you basically only use
interfaces to deal with other objects.
I don't understand this fine distinction you make between "users of the
library" and "other COM objects". There's code holding an interface
pointer to your COM object: it's irrelevant whether this code is
actually part of another COM object or not.
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925