Compartir a través de


Mejoras del servidor

Visual FoxPro incluye diversas mejoras para servidores COM que proporcionan interoperabilidad mejorada con las tecnologías de la plataforma principal como los servicios COM+.

Implementar interfaces

Un componente COM de Visual FoxPro puede implementar una interfaz COM válida, definida por otro componente COM. Esto significa que su clase Visual FoxPro contiene todos los miembros (por ejemplo, métodos) de esta interfaz COM. No se trata de una herencia real en la forma exacta en que la admite Visual FoxPro OOP, sino de un compromiso de que la definición de clase Visual FoxPro contendrá el mismo conjunto de miembros que tiene la clase del componente COM.

Para implementar una interfaz COM, utilice la nueva cláusula IMPLEMENTS del comando DEFINE CLASS.

Para obtener ejemplos de componentes COM de Visual FoxPro que utilizan la nueva compatibilidad IMPLEMENTS (y otras nuevas mejoras de servidor), vea la colección de ejemplos COM+ en el directorio ...\Samples\COM+\.

Enlace de eventos

Visual FoxPro admite la capacidad de enlazar a eventos desde otros componentes COM, como Recordsets ADO. (Por ejemplo, puede ejecutar código Fox cuando el puntero de registro se mueve a un Recordset ADO.)

Con la nueva función EventHandler( ) se admite el enlace de eventos. Para enlazar una clase Visual FoxPro a eventos desde un componente COM, la clase Visual FoxPro debe implementar la interfaz de evento del componente COM.

Este tipo de control de eventos se conoce como estrechamente acoplado, en el cual los objetos de origen del evento y activación del evento están activos en el momento en que ocurre el evento. La función EventHandler( ) se utiliza para eventos que se generan con la tecnología IConnectionPoint. Visual FoxPro no admite la capacidad de generación de eventos mediante IConnectionPoint.

La estrategia preferida para el control de eventos entre componentes COM es el uso de la tecnología de eventos COM+, que forma parte de los servicios COM+. Con eventos COM+, los componentes COM de Visual FoxPro también se pueden utilizar como un origen de evento (publicador). Además, los eventos COM+ proporcionan una arquitectura de emparejamiento libre, que permite a los suscriptores de eventos estar inactivos hasta que ocurran los eventos.

Compatibilidad con el enlace en tiempo de compilación

Ciertas clases COM no admiten una interfaz IDispatch (enlace en tiempo de ejecución). Esto ocurre cuando ha recibido un error OLE de "No se admite esa interfaz." devuelto desde una llamada CreateObject(). Ahora Visual FoxPro le permite trabajar con componentes COM utilizando interfaces mediante llamadas de enlace en tiempo de compilación.

La función CREATEOBJECTEX( ) le ofrece la posibilidad de especificar opcionalmente un tercer parámetro que le permite crear una instancia de un componente COM utilizando un enlace en tiempo de compilación. Puede utilizar la nueva función GETINTERFACE( ) para devolver una referencia de objeto de enlace en tiempo de compilación desde una existente.

Uso restrictivo de tipos en el código de la Biblioteca de tipos

Visual FoxPro proporciona control de uso restrictivo de tipos en el código que facilita la codificación y reduce errores en métodos en un comando DEFINE CLASS. Con el uso restrictivo de tipos en el código puede especificar el tipo de datos de parámetros y valores de devolución de métodos en sus componentes COM utilizando la cláusula AS. Para obtener más información, vea DEFINE CLASS. Visual FoxPro no exige escribir en tiempo de ejecución. El uso restrictivo de tipos en el código se utiliza al codificar la definición de clase en una Biblioteca de tipos (OLEPUBLIC) o al ver información de parámetros con IntelliSense.

El uso restrictivo de tipos en el código también proporciona la capacidad de transferir parámetros referenciándolos en métodos.

Control de atributos de Biblioteca de tipos

Además de la información codificada restrictivamente en una Biblioteca de tipos (OLEPUBLIC), puede especificar atributos de Biblioteca de tipos adicionales para propiedades y métodos utilizando la matriz COMATTRIB (para obtener más información, vea DEFINE CLASS). Al igual que hace con los métodos Access/Assign, agregue el nombre COMATTRIB al final de una propiedad o método (por ejemplo, MyMethod_COMATTRIB). La matriz COMATTRIB se puede utilizar para especificar información extendida de Biblioteca de tipos como una cadena de ayuda, capitalización, parámetros opcionales o si una propiedad es de sólo lectura.

Devolver una matriz desde métodos

Visual FoxPro le permite devolver matrices directamente desde un método de clase utilizando el operador @. Esta compatibilidad se agregó básicamente para componentes COM de Visual FoxPro, que podrían comunicarse con otros componentes COM como los escritos en Visual Basic o Visual C++, que podrían esperar la devolución de una matriz directamente desde un método. Esto también puede afectar a métodos implementados desde una interfaz utilizando la cláusula IMPLEMENTS.

Use matrices de miembros como en el ejemplo siguiente:

   DEFINE CLASS t1 AS custom OLEPUBLIC
      DIMENSION Arrayelement[3]
      FUNCTION GetMyArray() AS array
         this.Arrayelement[1] = 1
         this.Arrayelement[2] = 2   
         this.Arrayelement[3] = 3
         RETURN @THIS.Arrayelement
      ENDFUNC
   ENDDEFINE

Debido a que estas matrices deben estar en el alcance después de la llamada del método, las matrices LOCAL y PRIVATE no son válidas en estas declaraciones. Debe utilizar una matriz PUBLIC o de miembro. La compatibilidad de esta matriz no funciona con el comando STORE TO.

Identificador de la clave del registro FoxRuntime

Los servidores COM de Visual FoxPro registran ahora una nueva clave en el registro del sistema. La nueva clave FoxRuntime contiene una referencia a la biblioteca en tiempo de ejecución que utiliza el servidor. La nueva clave de registro se escribe de la forma siguiente con el <guid> que hace referencia al GUID del servidor COM de Visual FoxPro:

Key: HKEY_CLASSES_ROOT\CLSID\<guid>\FoxRuntime
Value: VFP7T.DLL

Actualizaciones de la clase Session

Gracias a esta capacidad de aislar datos con una sesión de datos privada, la clase Session es la clase de base que se recomienda utilizar en la creación de servidores COM de Visual FoxPro. Con Visual FoxPro, se han realizado las siguientes actualizaciones a esta clase:

  • Las propiedades, métodos y eventos intrínsecos ya no se escriben en la Biblioteca de tipos.
  • Sólo se escribirán las propiedades y métodos personalizados que especifique.
  • En versiones anteriores, tenía que pasar el valor HIDDEN a cada miembro manualmente.
  • Los siguientes valores SET tienen un nuevo valor predeterminado en la sesión de datos privada con la clase Session:
    • EXCLUSIVE = OFF
    • TALK = OFF
    • SAFETY = OFF

Capacidades de servidor avanzadas

Visual FoxPro proporciona diversas funciones nuevas para trabajar con componentes COM en un nivel muy bajo. Son para que las utilicen los programadores experimentados con un amplio conocimiento de la arquitectura y las reglas de COM. Incluyen varias nuevas funciones SYS().

La nueva función COMPROP( ) proporciona la capacidad de controlar comportamientos específicos de un componente COM. Estos comportamientos pueden diferir entre componentes COM, por lo que es necesario un amplio conocimiento del componente antes de establecer propiedades con nombre COMPROP. Para obtener más información, vea SYS(2336) - Soporte de sección fundamental, SYS(2339) - Llamar bibliotecas CoFreeUnusedLibraries al liberar el objeto COM, SYS(2340) - Soporte de servicio NT, SYS(3095) - Puntero IDispatch, SYS(3096) - Referencia de objeto IDispatch, SYS(3097) - Agregar referencia a objeto, SYS(3098) - Liberar referencia de objeto.

Vea también

Servidores de automatización y servidores COM | COMCLASSINFO( ) (Función) | COMARRAY( ) (Función)