Compartir a través de


Control Foxtlib de Visual FoxPro

Visual FoxPro incluye el control ActiveX Foxtlib (Foxtlib.ocx, ubicado en la carpeta System de Windows), que puede agregar y distribuir con sus aplicaciones. Los controles ActiveX se agregan a un formulario de una aplicación mediante el control Contenedor OLE de Visual FoxPro.

El control ActiveX Foxtlib permite el acceso a la información de las bibliotecas de tipos desde una aplicación Visual FoxPro. Las bibliotecas de tipos almacenan información sobre clases (propiedades, métodos, etcétera) para servidores de Automatización que puede crear con Visual FoxPro o Visual Basic. Normalmente, las bibliotecas de tipos se visualizan con examinadores de objetos y se hace referencia a ellas en otras aplicaciones, como Visual Basic o Visual C++, para permitir hacer referencias directas a objetos y compilarlas en el código.

Al crear un servidor de Automatización en el Administrador de proyectos o con los comandos BUILD DLL o BUILD EXE, se genera un archivo de biblioteca de tipos (.tlb). El archivo de biblioteca de tipos contiene información sobre cada clase, como el número de parámetros que requiere y sus tipos de datos, los tipos que devuelve el control, referencias a temas o archivos de ayuda con más información sobre la clase, etcétera.

Typelib.vcx, un ejemplo de biblioteca de clase visual que utiliza el control ActiveX Foxtlib, se encuentra instalado en el directorio …\Samples\Classes de Visual FoxPro.

En la tabla siguiente se muestran los métodos disponibles con el control ActiveX Foxtlib. Si desea información adicional sobre estos métodos, consulte Microsoft Developers Network.

Método Descripción
TLLoadTypeLib(cTypeLibName) Carga el archivo de biblioteca de tipos especificado en cTypeLibName. CTypeLibName debe contener una ruta de acceso y un nombre de archivo válidos. Devuelve un controlador, entero positivo, que señala al archivo de biblioteca de tipos; o bien un valor 0 o negativo si no se puede cargar el archivo de biblioteca de tipos.
TLRelease(nTypeLibHandle) Libera la biblioteca de tipos cargada cuyo controlador especifica nTypeLibHandle.
TLGetTypeInfoCount(nTypeLibHandle) Devuelve el número de informaciones de tipos de la biblioteca de tipos cuyo controlador especifica nTypeLibHandle.
TLGetDocumentation(nTypeLibHandle,
aDocArray, nMemberID, nType)
Crea una matriz de tres elementos con la información de la biblioteca de tipos cuyo controlador se especifica en nTypeLibHandle. ADocArray especifica el nombre de la matriz que se crea.

La matriz de tres elementos contiene el nombre, la cadena de documento y el archivo de ayuda correspondientes al miembro que especifica nMemberID. nType indica el tipo de miembro: 0 -TypeInfo o 1 - Member.

TLGetTypeInfo(nTypeLibHandle,
nTypeInfoNum)
Devuelve un índice entero para utilizarlo en los métodos TLGetTypeAttr( ), TlGetNames( ) y TLGetFuncDesc( ). TLGetTypeInfo( ) devuelve 0 si el método falla.

Use TLGetTypeInfo( ) para enumerar (desde 0) todas las informaciones de tipos de la biblioteca de tipos cuyo controlador se especifica con nTypeLibHandle. NTypeInfoNum especifica la información de tipos para la que se devuelve el índice.

TLGetTypeAttr(nTypeInfoIndex,
aTypeArray)
Crea una matriz de una dimensión con datos sobre una información de tipo. nTypeInfoIndex especifica el número de índice de la información de tipo. aTypeArray indica el nombre de la matriz creada.

La información contenida en cada elemento de la matriz es la siguiente:

1    GUID.
2    LocaleID.
3    Reservado.
4    Id. de constructor.
5    Id. de destructor.
6    Reservado.
7    Tamaño de instancia.
8    Clase de tipo.
9    Número de funciones.
10    Número de variables o miembros.
11    Número de interfaces implementadas.
12    Tamaño de la tabla de función virtual del tipo.
13    Alineación de bytes de una instancia del tipo.
14    Indicadores.
15    Número de versión principal.
16    Número de versión secundario.

TIGetFuncDesc(nTypeInfoIndex,
aTypeArray, nFunctionIndex, aParmsArray)
Devuelve información sobre una función especificada en una información de tipo.

La información de tipo se especifica mediante nTypeInfoIndex.

nFunctionIndex contiene el índice de la función cuya información se devuelve. nFunctionIndex está comprendido entre 0 y el recuento de funciones que devuelve aTypeArray[9] con el método TLGetTypeAttr( ).

TIGetFuncDesc( ) crea dos matrices, cuyos nombres se especifican con aTypeArray y aParmsArray.

La matriz aTypeArray contiene información sobre la función. La matriz aParmsArray contiene una lista con los parámetros que la función utiliza.

La información contenida en cada elemento de aTypeArray es la siguiente:

1    ID.
2    Func Kind - Clase de función; indica si la función es virtual, estática o sólo de envío.
3    Invoke Kind - Clase de invocación; indica si se trata de una función propiedad; y de ser así, de qué tipo se trata.
4    Callconv - Especifica la convención de llamada de la función.
5    Número total de parámetros.
6    Número de parámetros opcionales.
7    Para FUNC_VIRTUAL, especifica el desplazamiento en la tabla de función virtual.
8    Recuento de Scodes permitidos.
9    Indicadores.

Las siguientes son las clases de funciones:

FUNC_PUREVIRTUAL
El acceso a la función se realiza a través de la tabla de función virtual y requiere un puntero “this” implícito.

FUNC_VIRTUAL
El acceso a la función se realiza de la misma forma que con PUREVIRTUAL, excepto en que la función tiene una implementación.

FUNC_NONVIRTUAL
El acceso a la función se realiza mediante una dirección estática y requiere un puntero “this” implícito.

FUNC_STATIC
El acceso a la función se realiza mediante una dirección estática y no requiere un puntero “this” implícito.

FUNC_DISPATCH
El acceso a la función sólo puede realizarse a través de IDispatch.

Las siguientes son las clases de invocaciones:

INVOKE_FUNC
La llamada al miembro se hace mediante la sintaxis de invocación normal de la función.

INVOKE_PROPERTYGET
La función se invoca mediante la sintaxis normal de acceso a propiedades.

INVOKE_PROPERTYPUT
La función se invoca mediante la sintaxis de asignación de un valor a una propiedad. En un lenguaje de programación ordinario esto puede suponer modificar una propiedad de la misma forma en que se realiza una asignación; por ejemplo, Object.Property := Value.

INVOKE_PROPERTYPUTREF
La función se invoca mediante la sintaxis de asignación de una referencia a una propiedad.

Los indicadores son los siguientes:

FUNCFLAG_FRESTRICTED = 1
No debe ser posible el acceso a la función desde lenguajes de macros. Este indicador es adecuado para las funciones del nivel de sistema o aquéllas que los examinadores de tipos no deban mostrar.

FUNCFLAG_FSOURCE = 0x2
La función devuelve un objeto que produce eventos.

FUNCFLAG_FBINDABLE = 0x4
La función admite enlaces de datos.

FUNCFLAG_FDISPLAYBIND = 0x10
La función aparece al usuario como enlazable; es decir, también debe establecerse FUNC_FBINDABLE.

FUNCFLAG_FDEFAULTBIND = 0x20
La función que mejor representa al objeto. Sólo una función de cada información de tipo puede tener este atributo.

FUNCFLAG_FHIDDEN= 0x40
La función no debe mostrarse al usuario, aunque existe y es enlazable.

TIGetNames(nTypeInfoIndex,
aNameArray, aTypeArray[1])
Devuelve el número de funciones de una información de tipo y crea una matriz.

La información de tipo se especifica con nTypeInfoIndex y aNameArray indica el nombre de la matriz creada.

aTypeArray[1] contiene el identificador obtenido de la matriz aTypeArray del método TIGetFuncDesc( ).

Vea también

Introducción a los controles ActiveX | OLE Container (Control) | Crear servidores de automatización