Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
регестрировать Python объекты, как COM объекты… но это уже не Native API. Да, имею сказать про Native API — оно и правда весьма такое себе… Полный C++, с множественным наследованием, причем на ровном месте. Имею с ним не то чтобы богатый, но опыт — так вот моё мнение — проще, как для разработчиков API, так и для разработчиков расширений было бы всё это реализовать на Plain old good C. Тем более что если там вчитаться в код — всё с Plain C и начинается: библиотека экспортирует всего 3 обычные __stdcall — функции. Но первая возвращает указатель на класс. Который еще три наследует. Короче, какое-то «горе от ума» там.
Я бы не использовал конструкцию вида str(type(obj)) == "<type 'PyIDispatch'>", такой код, как мне кажется, выглядит немного лучше:
from win32com.client.dynamic import PyIDispatchType
if isinstance(obj, PyIDispatchType):
...Второй момент — чтобы экспортируемое имя не было испорчено, оберните его в extern "C" { ... }
Единственное, что может еще остаться непонятным — как передать данные из dll в 1CТам тоже весело. Не помню что там насчёт COM, но насколько я понял Native API делали «по мотивам». Так вот, там надо сначала получить указатель на аллокатор памяти самой 1С, и возвращаемые значения должны возвращаться, сорри за тавтологию, исключительно по указателю на область памяти, аллоцированную этим аллокатором, сорри за тавтологию еще раз, не я это придумал.
Помимо веб-сервиса
Использую для 1С Native компонент очень удобную обертку, а тут костыли какие то с неочень нужным здесь Python.
Интеграция 1С с DLL с помощью Python