![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при создание 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