-
В потоке 1 есть IDispatch и делается CoMarshalInterThreadInterfaceInStream
во 2-м потоке
CoGetInterfaceAndReleaseStream и т.д.
но поскольку CoGetInterfaceAndReleaseStream освобождает поток
нельзя повторно использовать методы Idispatch.
Как сделать, чтобы во 2-ьм потоке постоянно можно было бы работать
с IDispatch первого потока
-
> поскольку CoGetInterfaceAndReleaseStream освобождает поток
> нельзя повторно использовать методы Idispatch
Любопытное утверждение ..
-
Почему?
окончание CoGetInterfaceAndReleaseStream
четко об этом говорит
-
ReleaseStream говорит лишь о разрушении маршал-потока, но не о разрушении объекта.
-
О разрушении обьекта не говорилось.
Поскольку маршал-поток разрушен во 2-м потоке,
как повторно в нем использовать IDispatch из первого потока
-
> как повторно в нем использовать IDispatch из первого потока
что значит "повторно"? небольшое количество кода с пояснениями прояснило бы ситуацию.
-
Поток 1;
var v : IDispatch;
fStream : pointer; // общая для 2-х потоков
CoMarshalInterThreadInterfaceInStream(IDispatch,V as IUnknown,IStream (fStream));
Поток 2
var pObject : IDispatch;
наступает событие №1
GetInterfaceAndReleaseStream(IStream (fStream), IDispatch, pObject)
pObject.Metod1
маршал-поток fStream разрушен
но поток № 2 не завершился
наступает событие №2, что делать?
-
Что не понятно?
-
наступает событие №2, что делать?
pObject.Metod1
-
Поток 2
var pObject : IDispatch;
наступает событие №1
GetInterfaceAndReleaseStream(IStream (fStream), IDispatch, pObject)
маршал-поток fStream разрушен
pObject.Metod1
pObject.Metod2
pObject.Metod3
pObject.Metod4
-
всем СПАСИБО