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

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

D>CoInitilaize нужно вызывать единожды для потока а не для класса

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


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



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

D>в деструкторе вызовет креш. Потому что деструктор вызывает Release для своих членов неавно. Один будет явно лишним

D>Удачи!



Спасибо за совет.
Я не хотел так делать, чтобы не создавать экземпляр этого класса динамически в потоке. Это не слишком экономно для такой задачи.
Но я попробовал. Такой ошибки уже нет, зато вся программа работает нестабильно. Через пару десятков запусков потока программа слетает .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.