Ejemplo INPROC: muestra una aplicación de servidor de automatización activo

Actualización: noviembre 2007

El ejemplo INPROC es un servidor de automatización (antes Automatización OLE) en curso. A diferencia de los demás ejemplos de servidor de automatización de MFC, INPROC se puede cargar como una biblioteca de vínculos dinámicos (DLL) en el espacio de dirección del cliente. Los servidores en curso suelen ser más eficaces que los servidores implementados como ejecutables (EXE) por separado, porque no es necesaria una llamada a un procedimiento remoto (RPC) para llamar a métodos de los objetos implementados por el servidor.

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.

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 el ejemplo INPROC

  1. Abra la solución inproc.sln.

  2. En el menú Generar, haga clic en Generar.

  3. Registre la DLL de INPROC mediante el archivo .reg del proyecto, es decir, ejecute regedit INPROC.REG, o bien utilice REGSVR del ejemplo REGSVR.

    Si utiliza REGEDIT, asegúrese de que Inproc.dll está en el PATH del sistema. De manera alternativa, puede modificar el archivo .reg para hacer referencia explícitamente a la ruta de acceso de Inproc.dll.

    Una DLL no se puede ejecutar de manera independiente, como un archivo EXE; por tanto, para probar INPROC, debe utilizar una aplicación cliente. INPROC se puede controlar desde Visual Basic o Visual C++. Vea IPDRIVE para ver un ejemplo de cómo controlar INPROC desde Visual C++.

    Nota:

    Puede generar una versión EXE o una versión DLL de INPROC. Defina la variante EXE en la configuración del proyecto del ejemplo. Una versión EXE de INPROC se registra únicamente en el Registro de Windows.

Clases INPROC

La clase CVariantMap implementa un mapa VARIANT a VARIANT. Esto permite asignar cualquier VARIANT a otro VARIANT. Si bien esto puede no ser útil para desarrolladores de Visual C++ (que, probablemente, utilizarían CMap directamente), sí aporta el poder de las clases de colección de MFC a los usuarios de Visual Basic. A la clase CVariantMap se tiene acceso con el nombre mfc.inproc.varmap. Así es como se registra el objeto en el Registro de Windows. CVariantMap implementa los métodos y propiedades de la colección estándar, así como el método _NewEnum.

La clase CStringCollect implementa una matriz de cadenas. Su implementación es más sencilla que la de la clase CVariantMap, incluso si implementa muchas de las características de automatización que implementa CVariantMap. Al objeto CStringCollect se tiene acceso con el nombre mfc.inproc.strcoll. Implementa la mayoría de los métodos y propiedades de la colección estándar, y constituye un buen ejemplo de cómo implementar colecciones propias. Especial interés tiene su implementación del método _NewEnum, que permite a los usuarios de Visual Basic utilizar la sintaxis For Each... In cuando se enumera el contenido de una colección. CStringCollect utiliza CEnumVariant para implementar esta funcionalidad (implementa IEnumVARIANT mediante los mapas de interfaz de MFC). Quizá CEnumVariant le resulte útil en sus propias aplicaciones.

Finalmente, el ejemplo implementa algunas propiedades simuladas, que se utilizan para comparar el rendimiento de servidores en proceso y servidores LocalServer. Éstas son las propiedades que se prueban con los botones Prueba1 y Prueba2 de IPDRIVE.

Palabras clave

En este ejemplo, se muestra el uso de las siguientes palabras clave:

AfxIsValidAddress; AfxMessageBox; AfxOleInit; AfxOleLockApp; AfxOleUnlockApp; AfxThrowMemoryException; AfxThrowOleException; CCmdTarget::EnableAutomation; CCmdTarget::GetIDispatch; CCmdTarget::OnFinalRelease; CString::AllocSysString; CWinApp::InitInstance; CWinApp::RunAutomated; CWinApp::RunEmbedded; DllCanUnloadNow; DllGetClassObject; min

Vea también

Otros recursos

Ejemplos de MFC