В документации имеет место быть :
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 в 6.3
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Re: Проблема OLE в 6.3
Так это вообще не о том. На OLE в другом треде так сослаться вообще невозможно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 {'Некие действия'}
то это может и не работать?
Есть ли решение?
- NickTsigouro
- Новичок
- Сообщения: 5
- Зарегистрирован: 16 Июнь 2006, 13:00
- Откуда: Москва
- Контактная информация:
Может и работать, и не работать.
До 6.0 все треды работали по одним и тем же адресам памяти, и при переключении тредов происходил swap области данных треда. Поэтому после переключения треда, того окна может просто не оказаться в памяти.
В C6.x треды настоящие, виндовые и у каждого треда своя память и переключение производит винда без каких либо свопов. По идее, должно работать.
НО! GLO:OleWindow и GLO:OleFields должны быть не тредными, и соответствующее окно д.б. открыто в одном экзампляре. Следовательно необходимо использовать средства синхронизации для исключения одновременного доступа к OLE-контролу, GLO:OleWindow и GLO:OleFields из разных тредов.
До 6.0 все треды работали по одним и тем же адресам памяти, и при переключении тредов происходил swap области данных треда. Поэтому после переключения треда, того окна может просто не оказаться в памяти.
В C6.x треды настоящие, виндовые и у каждого треда своя память и переключение производит винда без каких либо свопов. По идее, должно работать.
НО! GLO:OleWindow и GLO:OleFields должны быть не тредными, и соответствующее окно д.б. открыто в одном экзампляре. Следовательно необходимо использовать средства синхронизации для исключения одновременного доступа к OLE-контролу, GLO:OleWindow и GLO:OleFields из разных тредов.
WBR, Nick Tsigouro