Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
2-1197561918
@!!ex
2007-12-13 19:05
2008.01.13
Дочернее окно поверх всех окон системы.


2-1197398005
Евгений Р.
2007-12-11 21:33
2008.01.13
Раскрытое окно в TDateTimePicker


15-1196885533
Cyrax
2007-12-05 23:12
2008.01.13
Авторизованные дилеры и гарантийный ремонт...


15-1196435497
Mul
2007-11-30 18:11
2008.01.13
"Красивый код" - что это?


4-1182121776
NOOBIX
2007-06-18 03:09
2008.01.13
Я многого достиг в Delphi




   Наверх