Share via


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

ATLTangram ist ein Anschluss des Tangram-Beispiels im letzten Kapitel von Dale Rogerson Inside COM (http://mspress.Microsoft.de). Vielen Dank an Dale für alle harte Arbeit und uns den Code in einem ATL-Beispiel zu verwenden. In diesem Beispiel können Sie eine ältere COM-Anwendung zu einem umwandeln, die ATL für deren Infrastruktur verwendet.

ATLTangram ist ein großes Projekt, das ATLTangram-Projektmappe, dem Mastercontroller für Unterprojekte bestehend: MFCTangram, ATLModel, ATLGdiWorld, ATLGLWorld, ATLModelExe und ATLTangramCanvas. Das Beispiel veranschaulicht verschiedene Features der integrierten Entwicklungsumgebung (IDE) und verschiedene Konzepte von COM. Das Beispiel veranschaulicht auch die Verwendung von MFC als Client von ATL COM-Servern.

SicherheitshinweisSicherheitshinweis

Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien.

So erhalten Sie Beispiele und Anweisungen für deren Installation:

Um Beispiele von Visual Studio zuzugreifen

  • im Menü Hilfe Menü klicken Beispiele.

    Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.

  • Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.

Erstellen und Ausführen des Beispiels

So erstellen und in diesem Beispiel führen

  1. Öffnen Sie die Projektmappe Datei atltangram.sln.

  2. From the Build menu, click Build Solution.

  3. Debuggen Sie von Menü, klicken Sie auf Starten ohne Debuggen.

  4. Ein Dialogfeld wird angezeigt: Wählen Sie entweder Option. Das Tangram-Programm wird gestartet.

Verwalten eines großen Projekts

Die Projektmappe hat die gegenseitigen Abhängigkeiten in der IDE festgelegt. Diese Abhängigkeiten mit der standardmäßigen Verzeichnisstruktur für das Beispiel arbeiten und Relative Pfad.

Die Abhängigkeitshierarchie sieht ungefähr folgendermaßen aus:

MFCTangram
   ATLGLWorld
      ATLGdiWorld
         ATLTangramCanvas
            ATLModel
   ATLModelExe
      ATLModel
      ATLModel

Alle Projekteinstellungen sind für das Beispiel bereits eingerichtet. Gehen Sie, Projekt-Abhängigkeiten zu untersuchen.

  1. Klicken Sie im Menü Projekt Eigenschaften auf.

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

  3. Im Dialogfeld Eigenschaftenseiten erweitern Sie Ordner allgemeine Eigenschaften, und wählen Sie Quelldateien debuggen. untersuchen diesen Pfaden nach Quelldateien Dateien im Feld Suchen.

  4. Klicken Sie auf Projektabhängigkeiten und untersuchen Sie die abhängigen Projektnamen.

Die Projekte ATLModel und ATLModelExe demonstrieren einen com-Server einrichten, damit Sie es als eine in-Proc-Server oder einem lokalen Server mithilfe des gleichen Satzes von Dateien und zwei Projektdateien erstellen können. Die Verwendung von zwei Projektdateien ermöglicht Abhängigkeiten auf die DLL und EXE-Datei vorhanden ist.

COM-ATL-Features

In diesem Beispiel ist ein COM-System, das besteht aus mehreren COM-Server und eine MFC-Anwendung, die Server verwendet. Dieses Beispiel intermodule Kommunikation über den Verbindungspunktmechanismus und demonstriert lokale und prozessinterne Server.

Andere demonstrierte Features

  • Die ATL-Server Verwenden der Standardvorlagenbibliothek für Auflistungen.

  • Der MFC-Treiber verwendet MFC-Vorlage-Klassen.

  • Der MFC-Treiber ein Beispiel für ein Dokument und Ansicht-Anwendung verwendet eine von CFrameWnd wie das Ausgabefenster für die Zeichnung abgeleitete Klasse die Tangram Teile.

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

Im 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

Im 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

Hinweis

Einige Beispiele wie diesen, wurden nicht geändert, um Änderungen in der Visual C++-Assistenten, Bibliotheken und Compiler, demonstrieren aber dennoch wie Sie die gewünschte Aufgabe durchführen.

Siehe auch

Weitere Ressourcen

ATL-Attributbeispiele