JS+
Усиленный язык сценариев для Windows
с возможностью встраивания
в ваши приложения
О языке JS+ Справочник Скачать JS+ DLL
Контакты
СПРАВОЧНИК ПО ЯЗЫКУ JS+ Содержание

JSP_RegAppFun

- функция JS+ DLL
Функции JS+ DLL
Регистрирует указанную функцию приложения для вызова в контексте выполняемого скрипта JS+. В дальнейшем зарегистрированная функция может быть вызвана в контексте выполняемого скрипта JS+ согласно описанным параметрам и возвращаемому значению.
Синтаксис
int __stdcall JSP_RegAppFun(
  ret_cType,
  fnc_cName,
  arg_cType
);

Параметры
Параметр Тип Описание
ret_cType char* описание типа возвращаемого значения регистрируемой функции (см. ниже)
fnc_cName char* имя регистрируемой функции
arg_cType char* описание типов аргументов регистрируемой функции, перечисляемых через запятую (см. ниже)

Параметр ret_cType
Текстовая строка, описывающая тип возвращаемого значения регистрируемой функции. Ниже указаны возможные типы возвращаемого значения:

Значение Описание
"void", "" возвращаемое значение отсутствует
"bool" возвращаемое значение типа bool (boolean)
"int" возвращаемое значение типа int (integer)
"double" возвращаемое значение типа double
"char*" возвращаемое значение типа char*
"wchar*" возвращаемое значение типа WCHAR* (wchar_t*)

Описание возвращаемого значения является регистронезависимым, т.е. записи "bool" и "BOOL" являются эквивалентными.

Два строковых типа возвращаемых значений реализовано для удобства программирования регистрируемой функции приложения. Скрипт JS+, вызывающий функцию приложения, в любом случае получит корректное возвращаемое значение типа String языка JScript/JavaScript.

Параметр arg_cType
Текстовая строка, перечисляющая через запятую типы до 32 аргументов регистрируемой функции. Ниже указаны возможные типы аргументов:

Значение Описание
bool& аргумент типа bool (boolean)
int& аргумент типа int (integer)
double& аргумент типа double
char* аргумент типа char*
wchar* аргумент типа WCHAR* (wchar_t*)
ansiStr& аргумент типа AnsiString
BSTR& аргумент типа BSTR
stdStr& аргумент типа std::string
stdWStr& аргумент типа std::wstring
sysStr& аргумент типа System::String (UnicodeString)
wideStr& аргумент типа WideString
size_t& аргумент типа size_t
vclCmp& аргумент типа VCL Component
Массивы
int[] аргумент типа массив int (integer)
double[] аргумент типа массив double
ansiStr[] аргумент типа массив AnsiString
BSTR[] аргумент типа массив BSTR
stdStr[] аргумент типа массив std::string
stdWStr[] аргумент типа массив std::wstring
sysStr[] аргумент типа массив System::String
wideStr[] аргумент типа массив WideString
size_t[] аргумент типа массив size_t

Строка описания аргументов является регистронезависимой, т.е. записи "bool&" и "BOOL&" являются эквивалентными.

Все типы аргументов, не смотря на присутствие в их именах символов &, * и [], передаются из скрипта JS+ в функцию приложения по значению.

Разнообразие строковых типов аргументов реализовано для удобства программирования регистрируемой функции приложения, которая получит из скрипта JS+ корректное значение аргумента любого строкового типа.

Массивы
Нулевым элементом в массиве JS+, предаваемом в функцию приложения, является длина передаваемого массива, приведенная к типу его элементов. Для использования ее в функции приложения, нулевой элемент передаваемого массива следует привести к целочисленному типу, а сам массив использовать со следующего (первого) элемента.

Visual C++
Для приложений Visual C++ недоступны типы аргументов:
vclCmp
stdStr
stdWStr
sysStr
ansiStr
wideStr
(а также их массивы)

Для приложений Visual C++ доступны дополнительные типы аргументов:
CStrA
CStrW
(а также их массивы)
соответствующие типам CStringA и CStringW языка Visual C++.

Delphi
Для приложений Delphi недоступны типы аргументов:
vclCmp
stdStr
stdWStr
(а также их массивы)

Возвращаемое значение
JSP_OK (0) в случае успеха либо JSP_ERROR (-1) в противном случае.
Пример (C++ Builder)
------------------------
 Приложение C++ Builder
------------------------

JSP_Start("TRIAL","");

JSP_RegAppFun("char*","App_tstCStr","char*");

JSP_RET_pchar App_tstCStr(char *str_Val)
{
  return _strrev(str_Val);
}

------------------------
 Скрипт JS+
------------------------

var jsp_str="A123я";

alert(
  jsp_str+"\n-\n"+
  App_tstCStr(jsp_str)
);

------------------------
 Вывод скрипта JS+
------------------------

A123я
-
я321A
Пример (Visual C++)
------------------------
 Приложение Visual C++
------------------------

JSP_Start("TRIAL","User=VC++");

JSP_RegAppFun("char*","App_tstCStr","char*");

JSP_RET_pchar App_tstCStr(char *str_Val)
{
  return _strrev(str_Val);
}

------------------------
 Скрипт JS+
------------------------

var jsp_str="A123я";

alert(
  jsp_str+"\n-\n"+
  App_tstCStr(jsp_str)
);

------------------------
 Вывод скрипта JS+
------------------------

A123я
-
я321A
Пример (Delphi)
------------------------
 Приложение Delphi
------------------------

JSP_Start('TRIAL','User=Delphi');

JSP_RegAppFun('char*','App_tstCStr','char*');

function App_tstCStr(str_Val:pAnsiChar): pAnsiChar stdcall;
begin
  Result:=pAnsiChar(ReverseString(str_Val));
end;
exports App_tstCStr;

------------------------
 Скрипт JS+
------------------------

var jsp_str="A123я";

alert(
  jsp_str+"\n-\n"+
  App_tstCStr(jsp_str)
);

------------------------
 Вывод скрипта JS+
------------------------

A123я
-
я321A
Примечание
Функции приложения не требуют формального объявления, поскольку вызываются косвенно из скрипта JS+.

C++
Для удобства записи возвращаемых значений функций приложения можно использовать следующие сокращения:

JSP_RET_voidфункция возвращает значение типа void
JSP_RET_bool функция возвращает значение типа bool
JSP_RET_doubleфункция возвращает значение типа double
JSP_RET_int функция возвращает значение типа int
JSP_RET_pchar функция возвращает значение типа char*
JSP_RET_pwcharфункция возвращает значение типа WCHAR* (wchar_t*)
Примеры функций приложения
В каталогах
ATTACH\Example\C++ Builder
ATTACH\Example\Delphi
ATTACH\Example\Visual C++
установочной папки JS+ представлены рабочие проекты приложения JS+ Test, подробно демонстрирующие применение различных функций приложения на платформах C++ Builder, Delphi и Visual C++.
Совместимость
C++ Builder/Delphi/Visual C++
JS+Руководство пользователя
Адрес этой страницы: http://jsplus.ru/MANUAL/JSPlus/EmbedApp/Function/JSP_RegAppFun.htm
© 2024,