Замещает значением val одержимое переменной памяти, заданной локатором loc.
int _Store(Locator FAR *loc, Value FAR *val)
Locator FAR *loc; /* Локатор переменной памяти. */
Value FAR *val; /* Записываемое значение. */ |
Примечания
Чтобы указать отдельный элемент массива, установите в поле l_subs количество используемых индексов, в полях l_sub1 и l_sub2 ѕ фактические значения индексов. Первый элемент массива имеет номер 1. Если loc массив и поле l_subs содержит 0, _Store( ) записывает значение val во все элементы массива.
_Store( ) возвращает 0 в случае успешного выполнения. Если возникает ошибка, _Store( ) возвращает отрицательное число, абсолютное значение которого представляет номер ошибки Visual FoxPro. Если _Store( ) при записи в массив выходит за пределы памяти, для некоторых элементов массива значения могут быть установлены, а для некоторых нет.
Для получения дополнительной информации о том, как создавать библиотеку API и интегрировать её в Visual FoxPro, смотрите Доступ к API Visual FoxPro.
Пример
В следующем примере строковый аргумент, переданный по ссылке, преобразуется в прописные символы.
Код Visual FoxPro
![]() | |
---|---|
SET LIBRARY TO STORE x = "abc" = XUPPER(@x) ? x |
Код C
![]() | |
---|---|
#include <pro_ext.h> void FAR Upper(ParamBlk FAR *parm) { char FAR *pString; Value val; int i; // // _Load() and _Store are the functions of interest for pass-by-reference. // _Load(&parm->p[0].loc, &val); // // FoxPro doesn't check the type of pass-by-reference arguments, so we do. // 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); // // We need to free the handle that we created with _LOAD() // _FreeHand(val.ev_handle); } FoxInfo myFoxInfo[] = { {"XUPPER", (FPFI) Upper, 1, "R"}, }; FoxTable _FoxTable = { (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo }; |