Wie erstelle ich eine ATL COM-Klasse, die von einer Basisklasse abgeleitet ist?

8

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%     
Qwertie 17.11.2008, 17:39
quelle

2 Antworten

1

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 versuchen
  1. Hält Ihre echte Programmlogik getrennt von der Infrastruktur / Verpackung (COM)
  2. Macht die echte Logikplattform unabhängig.
  3. Der zukünftige Betreuer muss deinen cleveren COM-Hack nicht verstehen
  4. Hält Ihre Programmlogik sauber und entfernt sich von der COM-Syntax, verbessert die Lesbarkeit
  5. Erleichtert die Wiederverwendung von realer Logik in anderen Verpackungsformen, zB als C DLL
computinglife 17.12.2008 16:07
quelle
0

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

    
John Dibling 17.11.2008 23:41
quelle