Lib.CallFunction
CallFunction (Вызов функций) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция вызывает зарегистрированную ранее функцию библиотеки по ее имени. Она отличается от непосредственного вызова функции <Библиотека>.<Имя функции>(<Аргументы>...)
тем, что поддерживает имена с нестандартными символами и позволяет вызывать функции, имена которых хранятся в переменных, что иногда необходимо при написании сложных участков программ.
Синтаксис
Lib.CallFunction(<Имя функции (STRING)><Аргумент 1>,<Аргумент 2>,...):<Возвращенное значение>
Аргументы
<Имя функции (STRING)>
- Аргумент задает имя функции. Поиск функций по их именам происходит без учета регистра.<Аргумент ?>
- (необязательный аргумент) Список аргументов, необходимых для вызова функции. Любой пропущенный аргумент будет заменен на альтернативу пустого значения при вызове (ноль, 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.CallFunction("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;