Lib.FunctionName

From SunFlurry wiki
Revision as of 12:11, 8 June 2023 by Admin (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
  <Имя функции> (Вызов функций)
Объект:Библиотека
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Неверное имя функции, неверные аргументы, слишком много аргументов, системная ошибка при вызове
Визуальность:Нет

Функция вызывает зарегистрированную ранее функцию библиотеки по ее имени.

Синтаксис

Lib.<Имя функции>(<Аргумент 1>,<Аргумент 2>,...):<Возвращенное значение>

Аргументы

  • <Аргумент ?> - (необязательный аргумент) Список аргументов, необходимых для вызова функции. Любой пропущенный аргумент будет заменен на альтернативу пустого значения при вызове (ноль, nil указатель и пр.). На данный момент система принимает и автоматически преобразует в аргументы следующие типы данных: числа (целые и вещественные), строки, буферы, записи. Планируется также использование объектов OLE. Аргументы, переданные, как переменные, могут быть обновлены значениями полученными из функции, если аргумент поддерживает адресацию "By ref" (см. Load).

Возвращаемое значение

Возвращается значение функции или пустое значение, если для функции не зарегистрировано возвращаемого значения.

Примеры

//Пример демонстрирует работу с глобальной функцией памяти GlobalMemoryStatusEx

//Пример возвращаемых значений для x86 клиента:
//Загрузка памяти: 17%
//Всего физической памяти: 16351.14Мб
//Доступно физической памяти: 13524.92Мб
//Максимум памяти для текущего процесса: 4095.88Мб
//Доступно памяти для текущего процесса: 3957.65Мб

//Пример возвращаемых значений для x64 клиента (Windows 7 x64):
//Загрузка памяти: 17%
//Всего физической памяти: 16351.14Мб
//Доступно физической памяти: 13453.49Мб
//Максимум памяти для текущего процесса: 8388607.88Мб
//Доступно памяти для текущего процесса: 8388462.27Мб

aKernel32:=Lib.Load("kernel32.dll");
aKernel32.RegisterFunction("GlobalMemoryStatusEx","stdcall","P","B32");
rMEMORYSTATUSEX:=MemoryRecord.Create("dwLength:UI32,dwMemoryLoad:UI32,ullTotalPhys:UI64,ullAvailPhys:UI64,"+
  "ullTotalPageFile:UI64,ullAvailPageFile:UI64,ullTotalVirtual:UI64,ullAvailVirtual:UI64,ullAvailExtendedVirtual:UI64");
rMEMORYSTATUSEX.Allocate();
rMEMORYSTATUSEX.dwLength:=rMEMORYSTATUSEX.Size();
If aKernel32.GlobalMemoryStatusEx(rMEMORYSTATUSEX) Then
  Message("Загрузка памяти: "+rMEMORYSTATUSEX.dwMemoryLoad+"%");
  Message("Всего физической памяти: "+Round(rMEMORYSTATUSEX.ullTotalPhys/1024/1024,2)+"Мб");
  Message("Доступно физической памяти: "+Round(rMEMORYSTATUSEX.ullAvailPhys/1024/1024,2)+"Мб");
  Message("Максимум памяти для текущего процесса: "+Round(rMEMORYSTATUSEX.ullTotalVirtual/1024/1024,2)+"Мб");
  Message("Доступно памяти для текущего процесса: "+Round(rMEMORYSTATUSEX.ullAvailVirtual/1024/1024,2)+"Мб");
EndIf;