Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при создание Excel.Application из потока [D7, WinXP]


Nike ©   (2007-12-12 09:59:00) 

Здравствуйте!

Хочу вынести в отдельный поток выполнение процедуры выгрузки данных в эксель. Без потока все работает нормально, если же я в теле потока (TMyThread.Execute) вызываю процедуру выгрузки, то появляется ошибка:
EOleSysError "Не был произведен вызов CoInitialize"

фрагмент кода, в котором возникает ошибка ниже:

...
var XL: Variant;
...
try
 XL:=CreateOleObject('Excel.Application'); //вот здесь возникает ошибка
 XL.Application.EnableEvents := false;
 XL.Application.DisplayAlerts:= false;
 XL.Workbooks.Add(extractFilePath(paramstr(0))+'\Template.xls');
 XL.Visible:=False;
except
 Raise Exception.Create('Ошибка открытия объекта Excel');
 exit;
end;


Пробовал вызвать до этого строки с ошибкой XL.Coinitialize; но этот вызов дает ошибку - инвалидная операция с вариантом. Не пойму, как тогда сделать надо? И почему возникает эта ошибка?
Поделитесь, может кто сталкивался с такой проблемой?


ага   (2007-12-13 05:54:00) [1]

рекомендую также либо выставить в файле проекта  
CoInitFlags:= COINIT_MULTITHREADED;
либо использовать CoInitializeEx(Nil,COINIT_MULTITHREADED)


Зачем?


Nike   (2007-12-12 14:53:00) [2]

To Palladin, Сергей М.
спасибо, действительно помогло. А я пытался вызывать CoInitialize, как метод переменной типа Variant.


Anatoly Podgoretsky ©   (12.12.07 11:46) [4]

Вы о какой функции??


Anatoly Podgoretsky   (2007-12-12 11:46:00) [3]

> Nike  (12.12.2007 09:59:00)  [0]

Не может оно выдать такую ошибку, поскольку в коде нет вызова функции, откуда, из воздуха или на будущее?


Palladin   (2007-12-12 10:10:00) [4]

рекомендую также либо выставить в файле проекта  
CoInitFlags:= COINIT_MULTITHREADED;
либо использовать CoInitializeEx(Nil,COINIT_MULTITHREADED)


Сергей М.   (2007-12-12 10:03:00) [5]

CoInitialize(nil);
try

 .. создание олей-объекта
 .. работа с олей-объектом
 .. уничтожение олей-объекта

finally
 CoUninitialize;
end;


Palladin   (2007-12-12 10:01:00) [6]

CoInitialize/Couninitialize это функции из модуля ActiveX


Наверх

Титульная страница Поиск, карта сайта Написать письмо