Здравствуйте, Bаня, Вы писали:
SOM ассеты бывают двух типов: глобальные и привязанные к DOM-элементу.
Описываются они одинаково (SOM_PASSPORT_BEGIN), отличие лишь в регистрации и доступе:
1) глобальные регистрируются через SciterSetGlobalAsset и обращаться к ним нужно по имени класса, указанном в паспорте (имя может задаваться отдельным параметром, кстати):
counter.Increment()
2) локальные регистрируются в обработчике событий элемента через HANDLE_SOM, а обращение к ним идёт как к свойству элемента:
el.counter.Increment()
На первый взгляд, второе не особо отличается от старого BEGIN_FUNCTION_MAP — они похожи, но SOM мощнее — там не только автоматическая распаковка параметров sciter::value, но и поддержка свойств, а не только функций.
B>1. имеем класс c++ типа
B>B>class MySuperDuperMegaClass: public sciter::om::asset<MySuperDuperMegaClass>
B>{...}
B>
B>из tis к нему нужно тоже обращаться как MySuperDuperMegaClass.MyFunc() ?
Само описание класса никак не влияет на метод обращения к нему, поэтому вопрос непонятен.
B>2. возьмём простейший класс на c++:
B>как теперь это юзать в tis?
counter.Increment()
B>никак, то есть как global namespace object нужно использовать не название класса, а набор букв по желанию как и в п.1
SOM_PASSPORT_BEGIN_EX позволяет задать произвольное имя, или я не понял вопроса.
B>3. зачем SciterSetGlobalAsset пытается удалить объект?
Затем, что по умолчанию там ожидается объект, созданный в памяти, и управление его жизнью идёт через счётчик ссылок. Это поведение можно переопределить, см asset_release и asset_finalize.
B>4. как прикрутить sciter::om::asset<MySuperDuperMegaClass> к фрейму?
B>ответ: юзать sciter::event_handler + attach_event_handler/detach_event_handler, но тогда зачем SOM?
Для свойств и простого мапинга между функциями и свойствами класса и скриптом.