Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Работа с OLE в дочернем потоке

Страницы: 1
Работа с OLE в дочернем потоке
Делаю программу, которая формирует однотипные вордовские документы. Документ в виде шаблона, программа создает документ из шаблона, заполняет поля и сохраняет по формату. В основном потоке все работает отлично, но блин перенести его в дочерний никак не получается, все время что-то не так ему. Либо опять же вешает приложение. Кто что предложит.
А можно поподробнее пожалуйста о возникающих ошибках.
И неплохо было бы предоставить текст программы...
Ошибка,выходит такая. "Приложение обратилась к интерфейсу, принадлежавшему к другому потоку"

Код
procedure TWordThread.Execute;
var
  f,e:OleVariant;
  doc:_Document;
begin
  e:=EmptyParam;
  f:='c:\temp\1.doc'
  with form1 do
    begin
      WordApplication1.Connect;
      doc:=WordApplication1.Documents.Add(f,e,e,e);
      WordApplication1.Quit;
      WordApplication1.Disconnect;
    end;
end;
Попробуйте создать COM-объект не в основном, а в дочернем потоке приложения smile;).

Каждая нить, использующая COM, должна вызывать CoInitialize или CoInitializeEx (объявлены в модуле ActiveX), прежде чем начать работу с COM. В случае использования OLE вызов CoInitialize может быть заменён на OleInitialize. В главной нити обычного приложения CoInitialize при необходимости вызывается кодом VCL (конкретно - модулем ComObj), но если порождается дополнительная нить, использующая COM, или создаётся сервис, консолное приложение и т.п., вызов CoInitialize(Ex) в неё приходится вставлять вручную. Равно как и CoUninitialize при завершении.

Зачем нужны вызовы CoInitialize и CoUninitialize, можно прочитать здесь:
http://podgoretsky.com/ftp/Docs/Delphi/DX/COMmodel.html
http://msdn.microsoft.com/en-us/library/ms678543(VS.85).aspx

Попробуйте так:

Код
procedure TWordThread.Execute; 
var 
 Word:Variant; 
begin 
 CoInitialize(nil);
 Word:=СreateOleobject('Word.Application');
 Word.Visible:=true;
 CoUnInitialize;
end;


Книга в тему (сам по ней учился работать с Office в Delphi;) ):
Корняков В. Н. - "Программирование документов и приложений MS Office в Delphi".
Изменено: Valera - 01.06.2010 11:35:05
max katonin, получилось?
Почему-то нет от Вас ответа...
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)