API пользовательских функций
Интерфейс пользовательских функций описан в файле include/VMSyscall.hpp. Каждая функция является классом, наследуемым от SyscallHandler.
Класс содержит шесть методов, из которых только два (Handler и GetName) являются полностью виртуальными. Таком образом, минимальная реализация
класса пользовательской функции должна предоставлять эти два метода.
Методы и их назначение перечислены ниже:
INT_32 InitHandler(CDT & oCDT)
Инициализация объекта класса.
oCDT - набор данных, неконстантная ссылка.
Метод может использоваться для передачи пользовательской функции необходимых параметров.
INT_32 PreExecuteSetup(OutputCollector & oCollector,
CDT & oCDT,
const ReducedStaticText & oSyscalls,
const ReducedStaticData & oStaticData,
const ReducedStaticText & oStaticText);
Метод, вызываемый шаблонизатором перед запсуком байткода на исполнение.
oCollector - коллектор выводимых данных
oCDT - набор переменных, переданных в шаблонизатор
oSyscalls - сегмент системных вызовов
oStaticData - сегмент статических данных
oStaticData - сегмент статического текста
INT_32 Handler(CDT * aArguments,
const UINT_32 & iArgNum,
CDT & oCDTRetVal)
Обработчик функции.
aArguments - набор переданных функции аргументов. Порядок следования анргументов - обратный.
iArgNum - количество переданных аргументов
oCDTRetVal - фозвращаемое функцией значение
В случае успешного выполнения метод должен вернуть 0. Любое другое возвращенное значение явлется признаком ошибки.
CCHAR_P GetName()
Получение имени функции.
Метод возвращает имя функции - asciz строку.
INT_32 GetVersion() const
Получение версии API функции.
Зарезервировано для использования в будущем.
INT_32 DestroyHandler(CDT & oCDT) throw()
Разрушение объекта класса.
oCDT - набор данных, неконстантная ссылка.
Метод может использоваться для передачи из пользовательской функции статистических или иных параметров.
Пример пользовательской функции можно найти на сайте проекта: http://ctpp.havoc.ru/stored_func.html
Copyright © 2003 - 2010 CTPP Dev. Team | http://ctpp.havoc.ru/