Форум — Ответы     (  К темам )
 ?  OLEG: Word в потоке — интересный вопрос для понимающих (29-04-2003 19:25:31)
Такая ситуация.

Строю отчет в Word (использую TWordApplication, TWordDocument).

Главная форма — Form1
У неё есть мето

void __fastcall CreateReport(void)
{
WordApplication1->Connect();
....
//передвижение ProgressBar (2 штуки)
}

Поток сделан для предоставления пользователю возможности прервать процесс построения отчета. Так как приходится иметь дело с ProgressBar из второго потока, поток создаётся с помощь TReportThread (потомок TThread)

TReportThread::TReportThread (TForm* MainForm)
: TThread (false) //запустить поток сразу при создании

TReportThread::Execute()
{
Synchronize(MainForm->CreateReport);
}

Так вот дело в том, что всё работает отлично, кроме доступа к Word!
При любом обращении к Word получаю error-message:

... raised exception EOleSysError with message "Не удаётся выполнить исходящий вызов, так как приложение обрабатывает входящих синхронный вызов".

Поймать EOleSysError — не могу. Его ловит Word.

Есть какие-нибудь идеи, как это побороть?

Без потоков работает нормально (естественно, процесс формирования отчета прервать низя).
Может, лучше бросить эти потоки в %.~^! и PumpMessage сделать (ловить сообщения и передавать главному окну? (хотя как это работать будет, понятно... %.~^!... Тормозить будет)

Помогите, кто знает.
Может, какая особенность в Word есть? Чем он там занят постоянно (AutoConnect не использую, ConnectKind=..NewInstance). Беда какая-то
 Skolotovich (06-05-2003 10:15:43)
скорее всего придется все таки потоки в !"№;;%№":.
енто проблема реализации ОЛЕ.
есть вариант другой -- более гИморойный -- DDE
но с ним не работал, тут ни чем не помогу