IR
irwinrodriguez.dev
Volver a documentación

Referencia de API

Documentación completa de la clase FoxBridge y los proxies de colección que genera dinámicamente.

Clase FoxBridge

La única clase que necesitas instanciar. Todos los demás objetos son proxies generados internamente.

Crear el puente y activarlo antes de usarlo
loBridge = NEWOBJECT("FoxBridge", "FoxBridge.prg")
IF !loBridge.Activate(lcJwt)      && obligatorio: sin esto no funciona nada
    ? loBridge.GetLastError()
    RETURN
ENDIF
Método / Propiedad Retorna Descripción
Activate(jwt) L (.T./.F.) Activa la licencia con el JWT que te pasa tu propio código. Es obligatorio y se exige igual en el IDE y en el EXE: sin activar, cualquier llamada responde „FoxBridge is not activated“. Devuelve .F. si el JWT no vale y deja el motivo en GetLastError(); no lanza un ERROR de VFP.
Create(typeName [, p1..p10]) Proxy Instancia un tipo .NET. typeName puede ser el nombre simple, un Qualified Assembly Name (con coma) o un tipo generico (List<String>).
Static(typeName) Proxy Devuelve un proxy para acceder a los miembros estaticos de un tipo (métodos, propiedades, campos de clase).
LoadAssembly(path) L (.T./.F.) Carga una DLL .NET en el contexto de ejecución. Necesario antes de Create() con tipos de esa DLL.
GetLastError() C Devuelve el mensaje del último error de .NET. Se limpia al empezar cada llamada y se CONSUME al leerlo: la segunda lectura seguida ya viene vacía, así que guárdalo en una variable si lo necesitas dos veces.
TypeExists(typeName) L Comprueba si un tipo existe sin lanzar excepción. Útil para detección segura de DLLs.
GetObjectCount() N Número de objetos .NET vivos en el heap. Útil para detectar fugas de memoria.
Version() C „FoxBridge Runtime 1.0.0 / Core …“. Es la forma de comprobar que la DLL nativa ha cargado y responde.
RuntimeVersion() · CoreVersion() C Las dos mitades por separado: la versión de la capa VFP y la del motor .NET.
SetProxyPath(path) Carpeta donde se escriben las clases proxy generadas. Hay que llamarlo ANTES del primer Create().
SetDebug(.T./.F.) Activa la traza interna de llamadas. Sale por el canal del depurador, así que en los binarios publicados (compilados en Release) no imprime nada: para diagnosticar, GetLastError().

Objetos proxy (instancias .NET)

Cada objeto creado con Create() o Static() es un proxy de FoxBridge. Estos son los métodos universales disponibles en todos ellos.

Método Descripción
MetodoNET([args]) Cualquier método público del tipo .NET subyacente. FoxBridge resuelve sobrecargas automáticamente.
.Propiedad Lectura de cualquier propiedad publica. Si devuelve un objeto, el resultado es otro proxy.
.Propiedad = valor Escritura de propiedades de lectura/escritura.
GetHandle() Retorna el handle interno (entero) del objeto .NET. Útil para comparar si dos proxies apuntan al mismo objeto.

Proxy de List<T> y Array

Cuando Create() detecta que el tipo es una lista o array, devuelve un proxy con esta interfaz.

Método Descripción
Count()Número de elementos de la colección. Es un método, con paréntesis.
Item(n)El VALOR del elemento en la posición n (base 1): cadena, número o .NULL. Para objetos, GetObject(n).
GetObject(n)El elemento como proxy. Es el que hay que usar cuando dentro de la colección hay objetos de .NET; Item(n) es para escalares.
Add(valor)Añade un elemento al final.
Remove(valor)Elimina la primera aparición del valor. Devuelve .T. si estaba.

Proxy de Dictionary<K,V>

Cuando Create() detecta que el tipo es un diccionario, devuelve un proxy con esta interfaz.

Método Descripción
Set(clave, valor)Establece o sobrescribe una clave.
Get(clave)Devuelve el valor escalar de la clave, o .NULL. si ahí hay un nulo de .NET.
GetObject(clave)Devuelve el valor como proxy, para cuando el valor es un objeto de .NET.
ContainsKey(clave)Devuelve .T. si la clave existe. El método se llama ContainsKey; Contains() no existe.
Remove(clave)Elimina la clave y su valor. Devuelve .T. si la había.

Manejo de errores

FoxBridge propaga las excepciones de .NET como errores de VFP. El patrón recomendado es TRY/CATCH.

Capturar con TRY/CATCH un tipo .NET que no existe
TRY
    loObj = loBridge.Create("Tipo.Que.No.Existe")
    loObj.HacerAlgo()
CATCH TO loEx
    ? "Tipo de error:", loEx.ErrorNo
    ? "Mensaje:      ", loEx.Message   && contiene el mensaje de .NET
    ? "Ultimo error: ", loBridge.GetLastError()
ENDTRY
Recuerda liberar los proxies Cada proxy FoxBridge mantiene una referencia a un objeto en el heap .NET. Asignar = .NULL. libera esa referencia e invoca el GC de .NET.

Volver a ejemplos: Ejemplos ->