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.
Sicherheitshinweis |
---|
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
Öffnen Sie die Projektmappe Datei atltangram.sln.
From the Build menu, click Build Solution.
Debuggen Sie von Menü, klicken Sie auf Starten ohne Debuggen.
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.
Klicken Sie im Menü Projekt Eigenschaften auf.
Wählen Sie die ATLTangram-Projektmappe im Projektmappen-Explorer aus.
Im Dialogfeld Eigenschaftenseiten erweitern Sie Ordner allgemeine Eigenschaften, und wählen Sie Quelldateien debuggen. untersuchen diesen Pfaden nach Quelldateien Dateien im Feld Suchen.
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.