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