Проблема OLE в 6.3

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Apron63
Новичок
Сообщения: 14
Зарегистрирован: 21 Октябрь 2007, 16:42
Откуда: Самара

Проблема OLE в 6.3

Сообщение Apron63 »

В документации имеет место быть :
it's impossible to guarantee correct operation of OLE controls if they are created
in a window other than the current thread


т.е. если в одном окошке открыть OLE, а потом из другого вызвать его через конструкцию

GLO:OleWindow $ GLO:OleFields {'Некие действия'}

то это может и не работать?
Есть ли решение?
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Проблема OLE в 6.3

Сообщение Yufil »

Apron63 писал(а):В документации имеет место быть :
it's impossible to guarantee correct operation of OLE controls if they are created
in a window other than the current thread


т.е. если в одном окошке открыть OLE, а потом из другого вызвать его через конструкцию

GLO:OleWindow $ GLO:OleFields {'Некие действия'}

то это может и не работать?
Есть ли решение?
Так это вообще не о том. На OLE в другом треде так сослаться вообще невозможно
Apron63
Новичок
Сообщения: 14
Зарегистрирован: 21 Октябрь 2007, 16:42
Откуда: Самара

Сообщение Apron63 »

А вот была программа в 5.5, именно так и работала через глобальный OLE.
Подсказали решить проблему через Notify - работает в общем-то, правда, не сильно красиво получается.
Аватара пользователя
NickTsigouro
Новичок
Сообщения: 5
Зарегистрирован: 16 Июнь 2006, 13:00
Откуда: Москва
Контактная информация:

Сообщение NickTsigouro »

Может и работать, и не работать.
До 6.0 все треды работали по одним и тем же адресам памяти, и при переключении тредов происходил swap области данных треда. Поэтому после переключения треда, того окна может просто не оказаться в памяти.
В C6.x треды настоящие, виндовые и у каждого треда своя память и переключение производит винда без каких либо свопов. По идее, должно работать.
НО! GLO:OleWindow и GLO:OleFields должны быть не тредными, и соответствующее окно д.б. открыто в одном экзампляре. Следовательно необходимо использовать средства синхронизации для исключения одновременного доступа к OLE-контролу, GLO:OleWindow и GLO:OleFields из разных тредов.
WBR, Nick Tsigouro
Ответить