CallFunction()
Синтаксис
Result = CallFunction(#Library , FunctionName$ [,Parameter1 [, Parameter2...]])
Описание
Вызывает функцию в указанной библиотеке по ее имени, с учётом соглашения о вызове 'stdcall'. Указанная библиотека должна быть ранее открыта с помощью функции OpenLibrary(), а вызываемая функция должна использовать соглашение о вызове 'stdcall' (Стандарт в большинстве DLL в Windows).
Параметры
#Library Номер для идентификации открытой библиотеки, из которой вызывается функция. Этот Номер должен совпадать с тем, что ранее был использован в функции OpenLibrary(), при открытии этой библиотеки. FunctionName$ Строка, содержащая имя вызываемой функции. Имя функции - чувствительно к регистру. Parameter1, Parameter2... Параметры для функции. Количество этих параметров должно совпадать с количеством параметров вызываемой функции. Максимальное количество поддерживаемых параметров равняется 20.
Возвращаемое значение
Возвращает Результат вызванной библиотечной функции, если библиотека не содержит функцию с указанным именем - возвратом будет 0.
Комментарии
Для вызова функции, которая использует соглашение о вызове 'cdecl', используйте команду CallCFunction().
Примечание: Эта функция не очень гибка и не обрабатывает string/float/double/quad параметры или string/float/double/quad возвращаемые значения. Настоятельно рекомендуется использование прототипов.
Пример для Windows
Define Num = OpenLibrary(#PB_Any, "user32.dll") ; Открывает библиотеку user32.dll и запоминает сгенерированный Номер в переменную Num CompilerIf #PB_Compiler_Unicode ; Выбирает вариант компиляции, в зависимости от использования/не использования Unicode CallFunction(Num, "MessageBoxW", 0, @"Message", @"Title", 0) ; Вариант с поддержкой Unicode CompilerElse CallFunction(Num, "MessageBoxA", 0, @"Message", @"Title", 0) ; Вариант с поддержкой ANSI CompilerEndIf If IsLibrary(Num) ; Проверка, открыта ли библиотека CloseLibrary(Num) ; Закрытие библиотеки EndIf
См. также
CallCFunction(), GetFunction(), Прототипы
Поддерживаемые OS
Все