Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The method you use to return a value from your program to Visual FoxPro depends on whether you're creating an ActiveX control or an FLL library.
Returning a Value from an ActiveX Control
To return a value from the ActiveX control to Visual FoxPro, use the RETURN statement in the control, passing a single value, as in the following example:
#define VERSION 101
// other code here
long CPyCtrl::GetVersion()
{
// set the version number here in variable fVersion
return VERSION;
}
Returning a Value from an FLL Library
To return values from an FLL library, use API functions, not native C or C++ commands. The following functions allow you to return values to Visual FoxPro.
Note Don't use the following API function to return a value from an .ocx file; use the RETURN statement. The API return functions should only be used in FLL libraries.
Function | Description |
---|---|
_RetChar(char *string) | Sets the function return value to a null-terminated string. |
_RetCurrency(CCY cval, int width) | Sets the function return value to a currency value. |
_RetDateStr(char *string) | Sets the function return value to a date. The date is specified in mm/dd/yy[yy] format. |
_RetDateTimeStr(char *string) | Sets the function return value to a date and time specified in mm/dd/yy[yy] hh:mm:ss format. |
_RetFloat(double flt, int width, int dec) | Sets the function return value to a float value. |
_RetInt(long ival, int width) | Sets the function return value to a numeric value. |
_RetLogical(int flag) | Sets the function return value to a logical value. Zero is considered FALSE. Any non-zero value is considered TRUE. |
_RetVal(Value *val) | Passes a complete Visual FoxPro Value structure; any Visual FoxPro data type except for memo can be returned. You must call _RetVal( ) to return a string that contains embedded null characters or to return a .NULL. value. |
Note To return the value of an object data type, use the _RetVal() function, filling in the
ev_object
field in the Value structure.
The following example, Sum
, accepts a reference to a numeric field in a table and uses _RetFloat
to return the sum of the values in the field:
#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
};
Assuming there's a numeric field named amount
in the currently open table, the following line of code in a Visual FoxPro program calls the function:
? SUM(@amount)
See Also
Passing and Reception of Parameters | Passing of Parameters to Visual FoxPro API Functions | Accessing the Visual FoxPro API | Extending Visual FoxPro with External Libraries | Access to Visual FoxPro Variables and Fields | API Library Construction