Суть такая...
Есть модуль делфи:
Есть поток...
type DrawThread=class(TThread)
private
protected
procedure Execute;override;
procedure proc1 () ;
procedure proc2() ;
end;
раздел реализации
procedure DrawThread.Execute;
begin
вызывает процедуру1 (proc1)
end;
procedure proc1 () ;
begin
proc2() //вызывает вторую процедуру
end;
procedure proc2 () ;
begin
обращается к документу эксель!
end;
Всё работало!!! Теперь вылетает эта ошибка... Библиотека comObj подключена, переменные объявлены!
Если на форме создать кнопку и на нажатие обратиться и считать данные с экселя, то всё работает... Да и этот кода работал, но вот щас, чёт не пашет... Помогите, как быть...
Процедура CoInitialize(nil); есть в модуле ActiveX, я его подключил.
Нашёл это: Для работы COM нужно делать CoInitalize (там создаются какие-то структуры данных итд).
Он автоматом делается для обычных Delphi программ (например в модуле ComCtrls),
но для всех дополнительных потоков (неважно как они создавались) этот вызов нужно делать самому.
Сначала, долго не мог понять, в каком месте вызывать этот CoInitialize(nil), но, в конце нашёл:
procedure DrawThread.Execute;
begin
CoInitialize(nil);
вызывает процедуру1 (proc1);
CoUninitialize;
end;
Теперь пишет "приложение обратилось к интерфейсу, относящемуся к другому потоку... " И тут я встал!! Не знаю, что делать!! Услышал в нете пару слов про маршалинг, но не совсем понял что это!!! Нужен совет мастера!!!!
//otvet.imgsmail.ru/download/22070069_9abd1cd1988671ae1cc07fde84b2a7a3_120x120.jpg//otvet.imgsmail.ru/download/22070069_145d06fd481617b6f38773cab609b886_120x120.jpg
Есть модуль делфи:
Есть поток...
type DrawThread=class(TThread)
private
protected
procedure Execute;override;
procedure proc1 () ;
procedure proc2() ;
end;
раздел реализации
procedure DrawThread.Execute;
begin
вызывает процедуру1 (proc1)
end;
procedure proc1 () ;
begin
proc2() //вызывает вторую процедуру
end;
procedure proc2 () ;
begin
обращается к документу эксель!
end;
Всё работало!!! Теперь вылетает эта ошибка... Библиотека comObj подключена, переменные объявлены!
Если на форме создать кнопку и на нажатие обратиться и считать данные с экселя, то всё работает... Да и этот кода работал, но вот щас, чёт не пашет... Помогите, как быть...
Процедура CoInitialize(nil); есть в модуле ActiveX, я его подключил.
Нашёл это: Для работы COM нужно делать CoInitalize (там создаются какие-то структуры данных итд).
Он автоматом делается для обычных Delphi программ (например в модуле ComCtrls),
но для всех дополнительных потоков (неважно как они создавались) этот вызов нужно делать самому.
Сначала, долго не мог понять, в каком месте вызывать этот CoInitialize(nil), но, в конце нашёл:
procedure DrawThread.Execute;
begin
CoInitialize(nil);
вызывает процедуру1 (proc1);
CoUninitialize;
end;
Теперь пишет "приложение обратилось к интерфейсу, относящемуся к другому потоку... " И тут я встал!! Не знаю, что делать!! Услышал в нете пару слов про маршалинг, но не совсем понял что это!!! Нужен совет мастера!!!!
//otvet.imgsmail.ru/download/22070069_9abd1cd1988671ae1cc07fde84b2a7a3_120x120.jpg//otvet.imgsmail.ru/download/22070069_145d06fd481617b6f38773cab609b886_120x120.jpg