Помещает значение переменной памяти или поля текущей записи, указанные с помощью loc в val.
int _Load(Locator FAR *loc, Value FAR *val) Locator FAR *loc; /* размещение переменной. */ Value FAR *val; /* Хранение значения переменной. */ |
Примечания
_Load() возвращает 0, если исполнение процедуры было успешным. В противном случае, она возвращет отрицательное число, абсолютное значение которого представляет собой номер ошибки Visual FoxPro. Вы можете использовать _Load() для извлечения содержимого мемо-поля, но она не будет извлекать символы из поля после первых 65,000 байт. Если loc определяет одномерный массив, Visual FoxPro возвратит значение его первого элемента.
_Load() не работает с объектами. Если loc представляет собой ссылку на объект, то _Load() вернет 0 wбез заполнения структуры val Value. Используйте _Evaluate() для получчения объектной ссылки.
Если установка поля Locator l_offset равна – 1, то Visual FoxPro возвратит логическое значение структуры, определяющее - была ли удалена текущая запись в указанной рабочей области:
-
ev_length = .T. = DELETED()
-
ev_length = .F. = NOT DELETED()
Замечание_Load() создает дейскриптор только в том случае, когда загружаемая переменная памяти вашей программы представляет собой символьную строку (ev_type = 'C'). Все остальные типы данных хранят свои значения в самой структуре Value. Ваша программа должна освобождать дескрипторы, созданные с помощью _Load().
Для получения более подробной информации о том, как создать библиотеу API и интегрировать ее с Visual FoxPro, смотрите описание Доступ к Visual FoxPro API.
Пример
Приведенный ниже пример преобразует в верхний регистр строчный параметр, посланный по ссылке.
Код
Visual FoxPro
Скопировать
код | |
|---|---|
SET LIBRARY TO LOAD x = "abc" = XUPPER(@x) ? x | |
Код
C
Скопировать
код | |
|---|---|
#include <pro_ext.h>
void FAR Upper(ParamBlk FAR *parm)
{
char FAR *pString;
Value val;
int i;
//
// _Load() и _Store представляют собой функции для pass-by-reference.
//
_Load(&parm->p[0].loc, &val);
//
// FoxPro не проверяет тип аргументов pass-by-reference, поэтому это делаем мы.
//
if (val.ev_type != 'C')
{
_Error(9); // "Data type mismatch"
}
pString = _HandToPtr(val.ev_handle);
for (i = 0; i < val.ev_length; i++)
{
if ('a' <= *pString && *pString <= 'z')
{
*pString += ('A' - 'a');
}
pString++;
}
_Store(&parm->p[0].loc, &val);
//
// Нам необходимо высвободить дескриптор, который мы создали с помощью _LOAD()
//
_FreeHand(val.ev_handle);
}
FoxInfo myFoxInfo[] =
{
{"XUPPER", (FPFI) Upper, 1, "R"},
};
FoxTable _FoxTable =
{
(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
}; | |
Смотрите
также
Справочное руководство
Процедура библиотеки API _ALen()Процедура библиотеки API _FindVar()
Процедура библиотеки API _NameTableIndex()
Процедура библиотеки API _NewVar()
Процедура библиотеки API _Release()
Процедура библиотеки API _Store()
Концепции
Процедуры библиотеки API от A до ZПрочие ресурсы
Доступ к Visual FoxPro APIПроцедуры библиотеки API по категориям
© Microsoft Corporation. All rights reserved.
Перевод выполнен JS.