Re: Builder, CoUninitialize и IXMLDocument в отдельном поток
От: Danchik Украина  
Дата: 08.04.05 12:08
Оценка:
Здравствуйте, SterhBy, Вы писали:

SB>Мастера, подскажите.

SB>Есть класс, создаваемый статически, в котором нужно использовать XML parser.
SB>Этот класс используется в отдельном потоке приложения. Это единственный поток, который порождается из основного и выполняет обработку данных.

Дружище, не пиши ты эти методы в конструкторе и деструкторе класса, они совсем к нему не относятся Это просто плохой подход.
CoInitilaize нужно вызывать единожды для потока а не для класса

В Execute методе потока напиши:


procedure TPayrollParserThread.Execute;
begin
  CoInitializeEx (nil, COINIT_MULTITHREADED);
  {если будет падать напиши CoInitialize (nil)}
  try
    ....
  finally
    CoUnitialize;
  end;
end;



Я Делфист и незнаю как там в CBuilder релизаются интерфейсы. Вполне возможно что точно также. Если да то x->Release()
в деструкторе вызовет креш. Потому что деструктор вызывает Release для своих членов неавно. Один будет явно лишним

Удачи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.