Re: ATL_NO_VTABLE
"Jeff Autery" <jeff.autery2008@gmail.com> wrote in message
news:72691BA7-7DF2-411C-B806-4A3ED9F9B063@microsoft.com
Hi,
I just read the artilce describing why ATL_NO_VTABLE
http://msdn.microsoft.com/en-us/magazine/cc301398.aspx
I understand its usage but why its used on the component class we
create through the ATL wizard? It's meant for the base class for
which no object will be created.
And in fact, your object is never created. It's abstract - it leaves the
three IUnknown methods unimplemented (if curious, try declaring a
variable of your COM class and see the compile errors).
ATL provides several classes that implement IUnknown in different ways
(as standalone object, as an inner in an aggregation, as a tear-off
interface, as a singleton and so on). These classes derive from their
template parameter. It is an instance of such a class that is ultimately
instantiated. Consider:
class CMyCOMObject : public CComObjectRoot, ... {};
// Won't compile
// CMyCOMObject *p = new CMyCOMObject;
// This class is provided by ATL
template <class T>
class CComObject : public T {
STDMETHODIMP QueryInterface(...);
// AddRef and Release here
};
// This compiles, and this is essentially what happens inside
// CComClassFactory::CreateInstance
CComObject<CMyCOMObject>* p = new CComObject<CMyCOMObject>;
--
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