В системе должен присутствовать совместимый интерпретатор Python. В данном случае это Python 3.3, инсталлятор которого можно скачать на официальном сайте разработчиков: http://www.python.org/ftp/python/3.3.5/python-3.3.5.msi
Интерфейс взаимодействия позволяет оформлять модули расширения максимально просто и наглядно. Для примера, вот функциональный аналог образца Native ВК от ИТС:
# -*- coding: utf-8 -*- from interfacing import * from time import sleep, monotonic from threading import Thread class Timer(Thread): def __init__(self, ent): self.done = False self.ent = ent Thread.__init__(self) def run(self): while not self.done: self.ent.ExternalEvent('ComponentNative', 'Timer', str(monotonic())) sleep(5) self.done = False @Component class CAddInNative: def __init__(self): self.m_boolEnabled = False self.AsyncEvent = Timer(self.Enterprise) @Readable('IsEnabled', 'Включен') @property def ePropIsEnabled(self): return self.m_boolEnabled @Writable @ePropIsEnabled.setter def ePropIsEnabled(self, value): self.m_boolEnabled = value @Readable('IsTimerPresent', 'ЕстьТаймер') @property def ePropIsTimerPresent(self): return True @Procedure('Enable', 'Включить') def eMethEnable(self): self.m_boolEnabled = True @Procedure('Disable', 'Выключить') def eMethDisable(self): self.m_boolEnabled = False @Procedure('ShowInStatusLine', 'ПоказатьВСтрокеСтатуса') def eMethShowInStatusLine(self, var): self.Enterprise.SetStatusLine(var) sleep(5) @Procedure('StartTimer', 'СтартТаймер') def eMethStartTimer(self): self.AsyncEvent.start() @Procedure('StopTimer', 'СтопТаймер') def eMethStopTimer(self): self.AsyncEvent.done = True @Function('LoadPicture', 'ЗагрузитьКартинку') def eMethLoadPicture(self, name): with open(name, 'rb') as f: return f.read() @Procedure('ShowMessageBox', 'ПоказатьСообщение') def eMethShowMsgBox(self): info = self.Enterprise.GetInterface(EC_IPlatformInfo) imsgbox = self.Enterprise.GetInterface(EC_IMsgBox) if info is None or imsgbox is None: return if imsgbox.Confirm(info.GetPlatformInfo()[0]): imsgbox.Alert('OK') else: imsgbox.Alert('Cancel') def ExplicitDone(self): self.AsyncEvent.done = True self.AsyncEvent.join()
В архиве есть достаточно подробная документация и комплект для тестирования.
Чтобы запустить тест, нужно указать путь к компоненте, по которому должен лежать и OnePyTest.py.