Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.13;
Скачать: CL | DM;

Вниз

Ошибка при создание Excel.Application из потока   Найти похожие ветки 

 
Nike   (2007-12-12 09:59) [0]

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

Хочу вынести в отдельный поток выполнение процедуры выгрузки данных в эксель. Без потока все работает нормально, если же я в теле потока (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; но этот вызов дает ошибку - инвалидная операция с вариантом. Не пойму, как тогда сделать надо? И почему возникает эта ошибка?
Поделитесь, может кто сталкивался с такой проблемой?


 
Palladin ©   (2007-12-12 10:01) [1]

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


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

CoInitialize(nil);
try

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

finally
 CoUninitialize;
end;


 
Palladin ©   (2007-12-12 10:10) [3]

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


 
Anatoly Podgoretsky ©   (2007-12-12 11:46) [4]

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

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


 
Nike   (2007-12-12 14:53) [5]

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


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

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


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

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


Зачем?



Страницы: 1 вся ветка

Текущий архив: 2008.01.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
2-1197377079
Бэтман
2007-12-11 15:44
2008.01.13
Проблема с кодировкой


6-1178348077
Анонимщики
2007-05-05 10:54
2008.01.13
Pipe, информация о клиенте


2-1197704849
Chingachguk
2007-12-15 10:47
2008.01.13
Asp в delphi 6.Не Net.


6-1178027712
denissoft
2007-05-01 17:55
2008.01.13
программно отключить соединение по локальной


2-1197666497
Максим
2007-12-15 00:08
2008.01.13
Sendmail