Вы можете возвращать значения из элементов управления ActiveX или Visual FoxPro dynamic-link libraries (FLL) в Visual FoxPro.

Для возврата значений из элементов управления ActiveX в Visual FoxPro

  • Используйте в элементе управоения команду RETURN и отправьте единичное значение.

Приведенный ниже пример использует команду RETURN для возврата номера версии, хранимой в VERSION:

 CopyCode imageСкопировать код
#define VERSION 101

// здесь может располагаться другой код

long CPyCtrl::GetVersion()
{
   // установите здесь номер версии в переменной fVersion
   возвратите VERSION;
}

Возврат значений из FLL библиотек

Когда вы желаете вернуть значения из  FLL библиотек, используйте функции API, а не родные команды C или C++.

NoteЗамечание

Когда возвращаете значения из файла элемента управления ActiveX control (.ocx), не используйте функции API для возврата значений из FLL библиотек. Вместо этого используйте команду RETURN.

Для возврата значений из FLL библиотеки

  • Используйте функции API, перечисленные в приведенной ниже таблице.

Приведенные ниже функции API должны использоваться только для FLL библиотек.

 
Функция Описание

_RetChar(char *string)

Устанавливает возвращаемое функцией значение в строку с нуль-терминатором.

_RetCurrency(CCY cval, int width)

Устанавливает возвращаемое функцией значение в денежную едииницу.

_RetDateStr(char *string)

Устанавливает возвращаемое функцией значение в дату. Дата указывается в  формате mm/dd/yy[yy].

_RetDateTimeStr(char *string)

Устанавливает возвращаемое функцией значение в дату и время, указаннные в формате mm/dd/yy[yy] hh:mm:ss.

_RetFloat(double flt, int width, int dec)

Устанавливает возвращаемое функцией значение в значение с плавающей запятой.

_RetInt(long ival, int width)

Устанавливает возвращаемое функцией значение в численное значение.

_RetLogical(int flag)

Устанавливает возвращаемое функцией значение в логическое значение. Нуль рассматривается как FALSE. Любое ненулевое значение рассматривается как TRUE.

_RetVal(Value *val)

Посылает завершенную структуру Visual FoxPro Value; любой тип данных Visual FoxPro, за исключением мемо, который может быть возвращен. Вы должны вызвать _RetVal( ) для возврата строки, которая содержит вложенные null-символы или возвращает значение .NULL..

NoteЗамечание

Для возврата значения типа данных "объект" используйте функцию the _RetVal(), с заполненным полем ev_object в структуре Value.

В приведенном ниже пример Sum, принимает ссылку на численное поле в таблице и использует _RetFloat для возврата суммы значений в поле:

 CopyCode imageСкопировать код
#include <Pro_ext.h>

Sum(ParamBlk *parm)
{
// декларация переменных
double tot = 0, rec_cnt;
int i = 0, workarea = -1; // -1 является текущей рабочей областью
Value val;

// GO TOP
_DBRewind(workarea);

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

// Проходим по таблице
for(i = 0; i < rec_cnt; i++)
{ 
   //Помещаем значение поля в структуру Value
   _Load(&parm->p[0].loc, &val);

   // добавляем значение для подсчета общей суммы
   tot += val.ev_real;

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

// Возвращаем значение суммы в Visual FoxPro
_RetFloat(tot, 10, 4); 
}
// Функция Sum принимает один параметр Reference
FoxInfo myFoxInfo[] = {
   {"SUM", Sum, 1,"R"} 
};
FoxTable _FoxTable = {
   (FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Предположим, что в текущей открытой таблице имеется численное поле с именем amount ; приведенная ниже строка кода в прорамме Visual FoxPro вызовет функцию:

 CopyCode imageСкопировать код
? SUM(@amount)

Смотрите также