Der Assistent "Einfaches ATL-Objekt" bietet keine Möglichkeit anzugeben, dass eine neue Klasse von einer vorhandenen Co-Klasse und ihrer Schnittstelle abgeleitet wird. In Visual Studio 2008, wie mache ich eine neue ATL COM-Klasse von einer bestehenden abgeleitet (dh Base
implementiert IBase
, und ich möchte eine neue Derived
-Klasse abgeleitet von Base
, die IDerived
implementiert , wobei IDerived
von IBase
abgeleitet wird.)
Update: Es klingt einfach, aber eine Wizard-generierte ATL-Klasse hat bis zu sechs Basisklassen, eine COM-Map und eine Verbindungspunkt-Map. Welche dieser Basisklassen und Karten sollten in der abgeleiteten Klasse wiederholt werden? Wenn Maps in der abgeleiteten Klasse wiederholt werden, sollten sie den Inhalt der Basisklassen-Map oder nur die zusätzlichen Elemente enthalten? Ist die Reihenfolge der Basisklassen wichtig? Was ist mit FinalConstruct()
und FinalRelease()
? Sollen DECLARE_PROTECT_FINAL_CONSTRUCT
und DECLARE_REGISTRY_RESOURCEID
in der abgeleiteten Klasse wiederholt werden?
Hier ist eine Beispiel-Basisklasse, die leer ist, außer für alle Standardbausteine. Wie soll nun die abgeleitete Klasse aussehen?
%Vor%Nur ein Vorschlag - wenn Ihr COM-Objekt nichts Besonderes mit COM-bezogenen Dingen zu tun braucht, können Sie Code implementieren, so dass die wahre Logik, die Ihre Basis-COM-Klasse tut, in einer anderen einfachen alten C ++ - Klasse, CBaseLogic, eingekapselt ist.
%Vor%Dies erreicht, was Sie mit dem zusätzlichen Vorteil von
zu tun versuchenBearbeiten Sie den von den Assistenten generierten Code. Wenn ein Objekt von zusätzlichen Schnittstellen abgeleitet werden soll, fügen Sie diese Basisklassen zur resultierenden Klassendeklaration hinzu.
Tags und Links c++ visual-studio com atl classwizard