Библиотека подключения python функций в приложение ИРБИС64
- Подключить в проекте Python37-32\include
- ИРБИС64(64 - это не про битность) и библиотека - x86. Python тоже рекомендуется версии x86.
- Подключить python37.lib (Или добавить в папку проекта)
Библиотека используется на сервере ИРБИС64
В корневой каталог ИРБИС64 нужно положить pyrun.dll и python37.dll
В библиотеке содержится одна функция StrByStr. Она отвечает требованиям разработчиков ИРБИС64 к подключаемым функциям:
Внешние функции должны ОБЯЗАТЕЛЬНО иметь следующую структуру:
в случае C
int test_function1(char *buf1, char *buf2, int bufsize)
где: buf1 – передаваемые данные (входные), buf2 – возвращаемые данные (выходные), bufsize – размер выходного буфера (buf2). В ИРБИС64 данные передаются и возвращаются в UTF8. Возврат функции: 0 – нормальное завершение; любое другое значение – ненормальное.
&unifor('+8<имя_DLL>,<имя_функции>,....
Следует помнить, что имя функции в вызове надо указывать строго в соответствии с тем, как она экспортирована из DLL, большие и маленькие буквы различаются.
Таким образом, непосредственно в формате применение следующее:
&uf('+8pyrun,StrPyStr,package.module|function|input_str')
Например, передать запись целиком в Python-функцию в виде json'строки целиком:
&uf('+8pyrun,StrPyStr,package.module|function|', &uf('+@'))
выбор модуля осуществляется через python адресацию import, с точкой, корневой каталог python проекта ~ корневой каталог ИРБИС64
Python функция возвращает строку, поэтому функция должна что-то возвращать, None вернется как None, библиотека вернет код возврата -7
Если перед именем модуля добавить восклицательный знак - библиотека будет возвращать строку с сообщением об ошибке парсинга строки, python вызова:
&uf('+8pyrun,StrPyStr,!package.module|function|', &uf('+@'))
Использование не рекомендуется где-нибудь кроме редактора формата.
Traceback python не возвращается, в случае необходимости отладки предполагается самостоятельная обработка try ... except