D3 Reference Manual

Index | Help

Поиск по страницам

Разделы / С-функции / _CP_call

_CP_call

call (функциональность оператора FlashBASIC)

int _CP_call(int* number, CPSTR* name,
 int expression, { CPSTR** string1 {, CPSTR** string2 {, ... }}})

Эквивалентна следующему оператору FlashBASIC:

call name( {string1 {, string2 {, ...}}})

Параметр "number" должен быть указателем на целое число. При первом вызове конкретной подпрограммы это целое число ДОЛЖНО содержать "-1". После успешного возвращения этот адрес будет содержать индексное число, которое должно передаваться всем последующим вызовам "_CP_call" этой же самой подпрограммы. Этот индекс позволяет системе перейти прямо в код подпрограммы без обращения к имени в главном словаре.

Параметр "name" должен указателем CPSTR*, указывающим на имя подпрограммы.

Вызываемая подпрограмма ДОЛЖНА быть уже скомпилирована компилятором FlashBASIC и каталогизирована в текущем главном словаре.

Выражение "expression" должно указывать количество параметров, подлежащих передаче.

Каждый переметр, передаваемый во FlashBASIC, должен быть указателем CPSTR**. По возвращении из подпрограммы FlashBASIC в случае необходимости преобразует свои переменныые обратно в строки и помещает результаты в переданные указатели CPSTR**.

В случае ошибки эта функция возвращает "-1". Код ошибки содержится в "_CP_errno". Список кодов ошибок включает следуюшее:

  • PE_BAD_PARAMS означает, что слишком много параметров было передано в качестве "expression". Пользователь может передать только _CP_MAX_PARAM параметров.
  • PE_LOAD_ERR означает, что система не могла загрузить подпрограмму. Подпрограмма должна быть каталогизирована и скомпилирована с текущей версией FlashBASIC.

Примеры:

/* Вызов пользовательской подпрограммы */
CPSTR * s = _CP_mkstr("hi");
int i = -1;
r = _CP_call(&i,s,0);
if (r < 0)
{
    _CP_logoff();
    exit(-1);
}
/* Теперь после загрузки подпрограммы ее можно вызвать */
/* очень эффективным образом                           */
for (j=1; j < 100; j++)   _CP_call(&i,s,0);