Sdílet prostřednictvím


Beispiel für ATLTangram-Attribute: Demonstriert die Verwaltung großer Projekte, die ATL, MFC und COM verwenden

Aktualisiert: November 2007

ATLTangram ist ein Anschluss des Tangram-Beispiels im letzten Kapitel von Inside Com von Dale Rogerson (http://mspress.microsoft.de). Wir danken Herrn Rogerson für die harte Arbeit und für seine Erlaubnis, den Code in einem ATL-Beispiel zu verwenden. Mithilfe dieses Beispiels können Sie eine Legacy-COM-Anwendung in eine Anwendung umwandeln, für deren Infrastruktur ATL verwendet wird.

ATLTangram ist ein großes Projekt und besteht aus der ATLTangram-Projektmappe, dem Mastercontroller für sieben Unterprojekte: MFCTangram, ATLModel, ATLGdiWorld, ATLGLWorld, ATLModelps, ATLModelExe und ATLTangramCanvas. In diesem Beispiel werden verschiedene Features der integrierten Entwicklungsumgebung (IDE, Integrated Development Environment) und verschiedene Konzepte von COM veranschaulicht. Darüber hinaus wird die Verwendung von MFC als Client von ATL COM-Servern veranschaulicht.

16k4aex6.alert_security(de-de,VS.90).gifSicherheitshinweis:

Dieser Beispielcode dient dazu, ein Konzept zu veranschaulichen. Er sollte nicht für Anwendungen oder Websites verwendet werden, da dieser Code unter Umständen nicht die sicherste Codierungstechnik darstellt. Microsoft übernimmt keine Haftung für beiläufig entstandene Schäden oder Folgeschäden, falls der Beispielcode nicht bestimmungsgemäß verwendet wird.

So rufen Sie Beispiele und Anweisungen für ihre Installation ab

  • Klicken Sie in Visual Studio im Menü Hilfe auf Beispiele.

    Weitere Informationen finden Sie unter Suchen von Beispieldateien.

  • Die neueste Version und vollständige Liste mit Beispielen ist online unter Visual Studio 2008 Samples verfügbar.

  • Sie können auch Beispiele auf der Festplatte des Computers suchen. Standardmäßig werden Beispiele und eine Infodatei in einen Ordner unter \Programme\Visual Studio 9.0\Samples\ kopiert. Für Express Editions von Visual Studio sind alle Beispiele online verfügbar.

Erstellen und Ausführen des Beispiels

So erstellen Sie dieses Beispiel und führen es aus

  1. Öffnen Sie die Projektmappendatei atltangram.sln.

  2. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

  3. Klicken Sie im Menü Debuggen auf Starten ohne Debuggen.

  4. Ein Dialogfeld wird geöffnet: Wählen Sie eine Option aus. Das Tangram-Programm wird gestartet.

Verwalten eines großen Projekts

Die Projektmappe hat die gegenseitigen Abhängigkeiten in der IDE festgelegt. Diese gegenseitigen Abhängigkeiten können mit der standardmäßigen Verzeichnisstruktur des Beispiels verwendet werden und sind pfadbezogen.

Die Abhängigkeitshierarchie sieht ungefähr wie folgt aus:

MFCTangram
   ATLGLWorld
      ATLGdiWorld
         ATLTangramCanvas
            ATLModel
   ATLModelExe
      ATLModel
      ATLModel

Alle Projekteinstellungen sind für das Beispiel bereits festgelegt. Führen Sie die folgenden Schritte aus, um die gegenseitigen Abhängigkeiten der Projekte zu untersuchen.

  1. Klicken Sie im Menü Projekt auf Eigenschaften.

  2. Wählen Sie die Atltangram-Projektmappe im Projektmappen-Explorer aus.

  3. Erweitern Sie im Dialogfeld Eigenschaftenseiten den Ordner Allgemeine Eigenschaften, und wählen Sie Quelldateien debuggen aus. Prüfen Sie den Inhalt des Felds In diesen Pfaden nach Quelldateien suchen.

  4. Klicken Sie auf Projektabhängigkeiten, und prüfen Sie die abhängigen Projektnamen.

Die Projekte ATLModel und ATLModelExe demonstrieren die Einrichtung eines COM-Servers, den Sie entweder als prozessinternen oder als lokalen Server mit denselben Dateien und zwei Projektdateien verwenden können. Die Verwendung von zwei Projektdateien ermöglicht das Vorhandensein von Abhängigkeiten sowohl in der DLL als auch in EXE.

COM/ATL-Features

Dieses Beispiel ist ein COM-System, das aus mehreren COM-Servern und einer MFC-Anwendung besteht, die diese Server verwendet. Dieses Beispiel verdeutlicht die Kommunikation zwischen Modulen über den Verbindungspunktmechanismus und demonstriert lokale und prozessinterne Server.

Andere demonstrierte Features

  • Die ATL-Server verwenden für Auflistungen die Standardvorlagenbibliothek.

  • Der MFC-Treiber verwendet MFC-Vorlagenklassen.

  • Der MFC-Treiber, ein Beispiel für eine Nicht-Dokument/Ansicht-Anwendung, verwendet eine von CFrameWnd abgeleitete Klasse als Ausgabefenster zum Zeichnen der Tangramteile.

Attribute

In diesem Beispiel werden die folgenden Attribute verwendet:

  • ATLTANGRAM   export, helpstring, object, pointer_default, uuid

  • ATLTANGRAM/atlgdiworld   coclass, com_interface_entry, default, dll, event_receiver, helpstring, iid_is, implements_category, in, module, name, object, out, pointer_default, progid, registration_script, size_is, unique, uuid, version, vi_progid

  • ATLTANGRAM/atlglworld   coclass, com_interface_entry, default, dll, event_receiver, helpstring, implements_category, in, module, name, object, out, pointer_default, progid, registration_script, uuid, vi_progid

  • ATLTANGRAM/atlmodel   coclass, default, dll, event_source, exe, helpstring, in, module, name, object, out, pointer_default, progid, size_is, uuid

  • ATLTANGRAM/atltangramcanvas   coclass, default, dll, helpstring, in, module, name, object, out, pointer_default, progid, registration_script, uuid, vi_progid

Klassen und Schlüsselwörter

In diesem Beispiel werden die folgenden ATL-Klassen verwendet:

CComObjectRootEx, CComCoClass, CComControl, IDispatchImpl, IProvideClassInfo2Impl, IPersistStreamInitImpl, IPersistStorageImpl, IPersistPropertyBagImpl, IPerPropertyBrowsingImpl, IQuickActivateImpl, IObjectSafetyImpl, IOleControlImpl, IOleObjectImpl, IOleInPlaceActiveObjectImpl, IViewObjectExImpl, IOleInPlaceObjectWindowlessImpl, IDataObjectImpl, ISupportErrorInfo, ISpecifyPropertyPagesImpl, IConnectionPointContainerImpl, IPropertyNotifySinkCP, CDialogImpl

In diesem Beispiel werden die folgenden MFC-Klassen verwendet:

CFrameWnd, CTypedPtrList<>, CDialog, CWinApp und zusätzliche unterstützende Klassen.

In diesem Beispiel werden die folgenden Schlüsselwörter verwendet:

_ASSERTE; AddRef; AddUpdateRect; Advise; assert; ASSERT; ATLTRACE; auxSolidSphere; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_MESSAGE_MAP; BEGIN_OBJECT_MAP; BitBlt; CATEGORYINFO ; CComCoClass; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObjectRootEx; CExeModule::Init; CExeModule::RegisterClassObjects; CExeModule::RegisterServer; CExeModule::RevokeClassObjects; CExeModule::UnregisterServer; CExeModule::UpdateRegistryFromResource; CFrameWnd::AssertValid; CFrameWnd::Dump; CFrameWnd::PreCreateWindow; ChoosePixelFormat; CModelList; CoCreateInstance; CoInitializeEx; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_AGGREGATE; COM_INTERFACE_ENTRY_IMPL; CONNECTION_POINT_ENTRY; CopyRect; CoTaskMemFree; CProxyIATLTangramModelEvent; CreateCompatibleDC; CreatePalette; CWnd::CreateEx; DECLARE_GET_CONTROLLING_UNKNOWN; DECLARE_MESSAGE_MAP; DECLARE_ONLY_AGGREGATABLE; DECLARE_REGISTRY_RESOURCEID; DeleteObject; DescribePixelFormat; DisableThreadLibraryCalls; DispatchMessage; DoButtonDown; DoModal; END_COM_MAP; END_CONNECTION_POINT_MAP; END_MESSAGE_MAP; END_OBJECT_MAP; EqualRect; ErrorMessage; GdiFlush; GetBoundingRect; GetClientRect; GetCommandLine; GetControllingUnknown; GetDC; GetMessage; GetModuleFileName; GetObject; GetPalette; GetPaletteEntries; GetPixelFormat; GetRotation; GetVertices; glBegin; glClearColor; GLdouble CoCreateInstance; glEnable; glEnd; glFlush; glGetIntegerv; glInitNames; glLightfv; glLightModelfv; glLoadIdentity; glMatrixMode; glNormal3d; glPolygonMode; glPopMatrix; glPopName; glPushMatrix; glPushName; GLRender; glRenderMode; GLResize; glRotated; glSelectBuffer; GLSetup; glTranslated; glTranslatef; gluPerspective; gluPickMatrix; gluUnProject; glVertex2d; glVertex3d; glViewport; HPALETTE; ICatInformation::EnumClassesOfCategories; ICatRegister::QueryInterface; ICatRegister::RegisterCategories; ICatRegister::RegisterClassImplCategories; ICatRegister::UnRegisterCategories; ICatRegister::UnRegisterClassImplCategories; IConnectionPointContainer::FindConnectionPoint; IConnectionPointContainer::Release; IConnectionPointContainerImpl; InitInstance; InvalidateRect; IsCurrent; IsValidAddress; IUnknown::Release; LoadIcon; LoadStandardCursor; LocalFree; MakeCurrent; OBJECT_ENTRY; ON_COMMAND; ON_WM_DESTROY ; OnCancel; OnDestroy; OnInitDialog; OnOK; OnQueryNewPalette; OutputDebugString; OutputGlError; Polygon; PreCreateWindow; PtInRegion; QueryInterface; RealizePalette; Release; ReleaseConnectionPoint; ReleaseDC; Rotate; SelectObject; SelectPalette; SetPixelFormat; SetRectEmpty; specifyMaterial; StringFromCLSID; SubkeyExists; va_end; wcscpy_s; wglCreateContext; wglGetCurrentContext; wglMakeCurrent

16k4aex6.alert_note(de-de,VS.90).gifHinweis:

In diesem und einigen anderen Beispielen wurden die Änderungen an den Visual C++-Assistenten, -Bibliotheken und -Compilern noch nicht nachvollzogen. Sie demonstrieren aber dennoch, wie Sie die gewünschte Aufgabe durchführen können.

Siehe auch

Weitere Ressourcen

ATL-Attributbeispiele