PureBasic

CallFunctionFast()

Синтаксис

Result = CallFunctionFast(*FunctionPointer [,Parameter1 [, Parameter2...]])

Описание


Вызывает функцию напрямую, используя её адрес, с учётом соглашения о вызове 'stdcall'. Вызываемая функция должна использовать соглашение о вызове 'stdcall' (Стандарт в большинстве DLL в Windows).

Параметры

*FunctionPointer Адрес вызываемой функции.

Этот указатель можно получить с помощью GetFunction(), GetFunctionEntry() или LibraryFunctionAddress(). Использование CallFunctionFast() - это быстрейший способ вызова функций библиотеки, особенно если были сохранены результаты вызова: GetFunction () или LibraryFunctionAddress(). Это связано с тем, что этой функции не требуется искать имя библиотечной функции.
Parameter1, Parameter2... Параметры для функции. Количество этих параметров должно совпадать с количеством параметров вызываемой функции. Максимальное количество поддерживаемых параметров равняется 20.

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

Возвращает Результат вызванной библиотечной функции.

Комментарии

Для вызова функции, которая использует соглашение о вызове 'cdecl', используйте команду CallCFunctionFast().

Примечание: Эта функция не очень гибка и не обрабатывает string/float/double/quad параметры или string/float/double/quad возвращаемые значения. Настоятельно рекомендуется использование Прототипов.

Пример для Windows

Define Num = OpenLibrary(#PB_Any, "user32.dll") ; Открывает библиотеку user32.dll и запоминает сгенерированный Номер в переменную Num
CompilerIf #PB_Compiler_Unicode                 ; Выбирает вариант компиляции, в зависимости от использования/не использования Unicode
  *MessageBox = GetFunction(Num, "MessageBoxW") ; Вариант с поддержкой Unicode
CompilerElse
  *MessageBox = GetFunction(Num, "MessageBoxA") ; Вариант с поддержкой ANSI
CompilerEndIf
If *MessageBox                                  ; Проверка доступности функции MessageBox 
  CallFunctionFast(*MessageBox, 0, @"Message", @"Title", 0) ; Запуск функции MessageBox по адресу
EndIf
If IsLibrary(Num)                               ; Проверка, открыта ли библиотека 
  CloseLibrary(Num)                             ; Закрытие библиотеки
EndIf

См. также

CallCFunctionFast(), GetFunction(), Прототипы

Поддерживаемые OS

Все

<- CallFunction() - Оглавление Library - CloseLibrary()->