Главная страница
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.013 c
15-1196967066
Light
2007-12-06 21:51
2008.01.13
Вопрос о роуминге


15-1196765928
boriskb
2007-12-04 13:58
2008.01.13
Молодым везде у нас дорога


3-1188898377
novill
2007-09-04 13:32
2008.01.13
IB 7.1 Что означает COMMIT RETAIN ?


2-1197814557
Stepper
2007-12-16 17:15
2008.01.13
Как подсчитать кол-во символов введенных в TEdit ?


15-1196934505
Pazitron_Brain
2007-12-06 12:48
2008.01.13
Как восстановить вид значков по умолчанию?