Compartir a través de


Devolver un valor a Visual FoxPro

El método que se usa para devolver un valor desde un programa a Visual FoxPro depende de si está creando un control ActiveX o una biblioteca FLL.

Devolver un valor desde un control ActiveX

Para devolver un valor desde un control ActiveX a Visual FoxPro, use la instrucción RETURN en el control, pasando un único valor, como en el siguiente ejemplo:

#define VERSION 101

// other code here

long CPyCtrl::GetVersion()
{
   // set the version number here in variable fVersion
   return VERSION;
}

Devolver un valor desde una biblioteca FLL

Para devolver valores desde una biblioteca FLL, use funciones de la API, no comandos nativos de C o C++. Las siguientes funciones le permiten devolver valores a Visual FoxPro.

Nota   No use la siguiente función de la API para devolver un valor desde un archivo .ocx; use la instrucción RETURN. Las funciones de devolución de la API sólo deben usarse en bibliotecas FLL.

Función Descripción
_RetChar(char *string) Establece el valor devuelto de la función en una cadena que termina en carácter nulo.
_RetCurrency(CCY cval, int width) Establece el valor devuelto de la función en un valor de tipo Currency.
_RetDateStr(char *string) Establece el valor devuelto de la función en una fecha. La fecha se especifica en el formato dd/mm/aa[aa].
_RetDateTimeStr(char *string) Establece el valor devuelto de la función en un valor de fecha y hora especificado en el formato mm/dd/aa[aa] hh:mm:ss.
_RetFloat(double flt, int width, int dec) Establece el valor devuelto de la función en un valor de tipo Float.
_RetInt(long ival, int width) Establece el valor devuelto de la función en un valor de tipo Numeric.
_RetLogical(int flag) Establece el valor devuelto de una función en un valor de tipo Logical. Cero se considera FALSE. Cualquier valor distinto de cero se considera TRUE.
_RetVal(Value *val) Pasa una estructura Value completa de Visual FoxPro; se puede devolver cualquier tipo de datos de Visual FoxPro excepto memo. Tiene que llamar a _RetVal( ) para devolver una cadena que contiene incrustados caracteres nulos o para devolver un valor .NULL.

Nota   Para devolver el valor de un tipo de datos de objeto, use la función _RetVal(), rellenando el campo ev_object de la estructura Value.

El siguiente ejemplo, Sum, acepta una referencia a un campo de tipo Numeric de una tabla y usa _RetFloat para devolver la suma de los valores del campo:

#include <Pro_ext.h>

Sum(ParamBlk *parm)
{
// declare variables
double tot = 0, rec_cnt;
int i = 0, workarea = -1; // -1 is current workarea
Value val;

// GO TOP
_DBRewind(workarea);

// Get RECCOUNT( )
rec_cnt = _DBRecCount(workarea);

// Loop through table
for(i = 0; i < rec_cnt; i++)
{ 
   //Place value of the field into the Value structure
   _Load(&parm->p[0].loc, &val);

   // add the value to the cumulative total
   tot += val.ev_real;

   // SKIP 1 in the workarea
   _DBSkip(workarea, 1);
} 

// Return the sum value to Visual FoxPro
_RetFloat(tot, 10, 4); 
}
// The Sum function receives one Reference parameter
FoxInfo myFoxInfo[] = {
   {"SUM", Sum, 1,"R"} 
};
FoxTable _FoxTable = {
   (FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Suponiendo que haya un campo de tipo Numeric denominado amount en la tabla abierta actualmente, la siguiente línea de código de un programa de Visual FoxPro llama a la función:

? SUM(@amount)

Vea también

Transmitir y recibir parámetros | Transferir parámetros a funciones de la API de Visual FoxPro | Acceso a la API de Visual FoxPro | Ampliar Visual FoxPro con bibliotecas externas | Acceso a variables y campos de Visual FoxPro | Creación de bibliotecas API