Страница 1 из 1
Проблема OLE в 6.3
Добавлено: 02 Ноябрь 2007, 22:45
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 {'Некие действия'}
то это может и не работать?
Есть ли решение?
Re: Проблема OLE в 6.3
Добавлено: 06 Ноябрь 2007, 17:45
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 в другом треде так сослаться вообще невозможно
Добавлено: 06 Ноябрь 2007, 19:49
Apron63
А вот была программа в 5.5, именно так и работала через глобальный OLE.
Подсказали решить проблему через Notify - работает в общем-то, правда, не сильно красиво получается.
Добавлено: 12 Ноябрь 2007, 18:06
NickTsigouro
Может и работать, и не работать.
До 6.0 все треды работали по одним и тем же адресам памяти, и при переключении тредов происходил swap области данных треда. Поэтому после переключения треда, того окна может просто не оказаться в памяти.
В C6.x треды настоящие, виндовые и у каждого треда своя память и переключение производит винда без каких либо свопов. По идее, должно работать.
НО! GLO:OleWindow и GLO:OleFields должны быть не тредными, и соответствующее окно д.б. открыто в одном экзампляре. Следовательно необходимо использовать средства синхронизации для исключения одновременного доступа к OLE-контролу, GLO:OleWindow и GLO:OleFields из разных тредов.