![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Код не работает в DLL и работает в EXE
Unax © (2004-06-24 17:10:00)Я создал DLL с функцией передачи данных в Excel. Эта функция нормально работает в обычном проекте, но в DLL в указанной строчке выдается ошибка EOleSysError с сообщением "CoInitialize has not been called". Подскажите с чем это может быть связано.
Вообщем код такой
var
Range,V : OleVariant;
i : integer;
ExcelApplication1: TExcelApplication;
ExcelWorkbook1: TExcelWorkbook;
ExcelWorksheet1: TExcelWorksheet;
begin
ExcelApplication1 := TExcelApplication.Create(nil);
ExcelWorkBook1 := TExcelWorkbook.Create(nil);
ExcelWorkSheet1 := TExcelWorksheet.Create(nil);
ExcelApplication1.ConnectKind := ckNewInstance;
ExcelApplication1.SheetsInNewWorkbook[LOCALE_USER_DEFAULT] := 1;
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,LOCALE_USER_DEFAULT));
ExcelWorkBook1.Activate(LOCALE_USER_DEFAULT);
ExcelWorksheet1.ConnectTo(ExcelApplication1.ActiveWorkbook.ActiveSheet as ExcelWorkSheet);
ExcelApplication1.Visible[LOCALE_USER_DEFAULT] := true;
ExcelWorkSheet1.Name := '?????????';
Range := ExcelWorkSheet1.Range['A1','H1'];
V := VarArrayCreate([1,8],varVariant);
V[1] := '????????';
V[2] := '?????';
V[3] := '???????';
V[4] := '????';
V[5] := '?????';
V[6] := '??????';
V[7] := '??????';
V[8] := '??. ?????';
Range.Value := v;
ExcelWorkbook1.Disconnect;
ExcelWorksheet1.Disconnect;
ExcelApplication1.Disconnect;
ExcelApplication1.Free;
Unax (2004-06-24 17:29:00) [1]Спасибо огромное! Заработало
Надо вызывать ф-ю CoInitializeEx
Тимохов (2004-06-24 17:22:00) [2]я не сильно хорошо помню детали, но точно знаю одно, что для того, чтобы обращаться к com из потока нужно вызвать coinitialize. Для главногоо потока за вас это уже дельфи сделал сам, а для доп потоков надо делать самому. Как дела обстоят с dll, не помню, но допускаю, что для dll также важна эта функция. почитайте про нее в msdn
Тимохов (2004-06-24 17:17:00) [3]именно с тем, что написано в сообщении об ошибке.
надо вызывать указанную функцию.