ganainm
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Цитата: Бесплатный - да. Но не работающий. Тем более не абсолютно. Чтобы он у меня хоть как-то заработал (стал передавать значения тегов) пришлось сменить потоковую модель на tmApartment, а чтобы заработал как надо со всеми всех имеющимися клиентами выловил и исправил еще 3 разной критичности бага. (1. Не все клиенты "видят" сервер как ОРС, ибо не хватает пары спецзаписей в реестре. 2. Баг в Енумираторе, проявляется когда клиент запрашивает не ровно столько групп, сколько создал, а больше. Енумератор должен вернуть столько, сколько реально есть, а в sOPC при этом возвращается E_FAIL со всеми вытекающими. 3. Баг в деструкторе главного объекта. Если клиент уничтожает группу просто присвоив NULL/nil, не вызвав перед этим RemoveGroup (а такое часто происходит при закрытии клиентского приложения), то группа не удаляется из списка внутри сервера, в результате, при отключении клиента в деструкторе инстанса сервера возникает неловленная исключительная ситуация AV (попытка вызвать Free у объекта, который уже был уничтожен ), после нее остальные операторы деструктора не выполняются, и, как следствие, счетчик ссылок на COM-объект не уменьшается. Т.е. клиент закрывается, а сервер считает, что он еще подключен и потому не закрывается автоматически (если этот клиент был единственным). Эти баги выгреб - вроде все нормально работает. Не проверял правда PublicGroups - чую и там бесовщину, но доказать пока не могу. В остальном - отличный объект хорошо логически выстроенный. Действительно, можно не лезть и не разбираться как работает это OPC, а в одном-единственном модуле написать свои функции чтения и записи тегов и функцию заполнения адресного пространства тегами. Ну еще в dpr поменять имя и описание сервера на свои. Радует, что, в отличие от других открытых исходников серверов, тут реализована не плоская, а иерархическая модель адресного пространства, что позволяет группировать тэги как угодно с любым количеством уровней вложенности. |