Compartir a través de


Ejemplo de atributos ATLTangram Attributes: muestra la administración de proyectos grandes que utilizan ATL, MFC y COM

Actualización: noviembre 2007

ATLTangram es una versión del ejemplo Tangram presentado en el último capítulo de Inside COM de Dale Rogerson (http://mspress.microsoft.com). Muchas gracias a Dale por su trabajo y por permitirnos utilizar el código en un ejemplo de ATL. Este ejemplo ayuda a convertir una aplicación COM heredada en otra que utilice ATL para su infraestructura.

ATLTangram es un proyecto grande que consiste en la solución ATLTangram, que constituye el controlador maestro de seis subproyectos: MFCTangram, ATLModel, ATLGdiWorld, ATLGLWorld, ATLModelExe y ATLTangramCanvas. El ejemplo muestra varias características del entorno de desarrollo integrado (IDE) y algunos conceptos de COM. El ejemplo también muestra cómo utilizar MFC como cliente de servidores COM de ATL.

Nota de seguridad:

Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que quizás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para obtener ejemplos e instrucciones para su instalación:

  • En el menú Ayuda de Visual Studio, haga clic en Ejemplos.

    Para obtener más información, vea Localizar archivos de ejemplo.

  • La lista de ejemplos completa con la versión más reciente está disponible en línea en la página Visual Studio 2008 Samples.

  • También encontrará ejemplos en el disco duro de su equipo. De manera predeterminada, los ejemplos y el archivo Léame se copian en una carpeta bajo \Archivos de programa\Visual Studio 9.0\Samples\. Para las versiones express de Visual Studio, todos los ejemplos están en línea.

Generar y ejecutar el ejemplo

Para generar y ejecutar este ejemplo

  1. Abra el archivo de solución atltangram.sln.

  2. En el menú Generar, haga clic en Generar solución.

  3. En el menú Depurar, haga clic en Iniciar sin depurar.

  4. Aparecerá un cuadro de diálogo: seleccione alguna opción. Se iniciará el programa Tangram.

Administrar un proyecto grande

La solución ha establecido las interdependencias en el IDE. Estas interdependencias trabajan con la estructura de directorios predeterminada para el ejemplo y son relativas a la ruta de acceso.

La jerarquía de dependencias ofrece el siguiente aspecto:

MFCTangram
   ATLGLWorld
      ATLGdiWorld
         ATLTangramCanvas
            ATLModel
   ATLModelExe
      ATLModel
      ATLModel

Todos los valores de configuración del proyecto ya están establecidos para el ejemplo. Siga estos pasos para examinar las interdependencias del proyecto.

  1. En el menú Proyecto, haga clic en Propiedades.

  2. Seleccione la solución Atltangram en el Explorador de soluciones.

  3. En el cuadro de diálogo Páginas de propiedades, abra la carpeta Propiedades comunes y seleccione Depurar archivos de código fuente. Examine el cuadro Buscar archivos de código fuente en estas rutas.

  4. Haga clic en Dependencias del proyecto y examine los nombres de proyecto dependiente.

Los proyectos ATLModel y ATLModelExe muestran cómo configurar un servidor COM de modo que se pueda generar como servidor integrado en un proceso o como servidor local (que ejecuta su propio proceso) utilizando el mismo conjunto de archivos y dos archivos de proyecto. Mediante el uso de dos archivos de proyecto, las dependencias se pueden mantener tanto en la DLL como en el EXE.

Características COM/ATL

Este ejemplo es un sistema COM que consta de varios servidores COM y una aplicación MFC que utiliza los servidores. El ejemplo exhibe la comunicación entre módulos por medio del mecanismo de punto de conexión y realiza una demostración de los servidores local e integrado en un proceso.

Otras características mostradas

  • Los servidores ATL utilizan la Biblioteca de plantillas estándar para colecciones.

  • El controlador MFC utiliza clases de plantillas MFC.

  • El controlador MFC, un ejemplo de aplicación de vista/no documento, utiliza una clase derivada de CFrameWnd como ventana de resultados para dibujar las piezas de Tangram.

Atributos

En este ejemplo se utilizan los atributos siguientes:

  • 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

Clases y palabras clave

El ejemplo utiliza las siguientes clases de ATL:

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

El ejemplo utiliza las siguientes clases de MFC:

CFrameWnd, CTypedPtrList<>, CDialog, CWinApp y otras clases adicionales

En este ejemplo se utilizan las siguientes palabras clave:

_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

Nota:

Algunos ejemplos, como éste, no se han modificado para reflejar los cambios en los asistentes, las bibliotecas y el compilador de Visual C++, pero, aun así, muestran cómo realizar la tarea deseada.

Vea también

Otros recursos

Ejemplos de atributos ATL