![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Установка CoInitFlags в COINIT_MULTITHREADED портит иконки файлов
GreyWolf © (2009-12-12 13:23:00)Добрый день.
Когда я в dpr файле проекта устанавливаю
CoInitFlags := COINIT_MULTITHREADED;
перед
Application.Initialize;
, в OpenFileDialog после этого некоторые иконки 16x16 файлов с зарегистрированным расширением отображаются как иконки незарегистрированных типов (бумажка с маленьким логотипом Windows). Например, .html. Delphi 7, тестировал на системах windows 2000 - windows 7.
Если я убираю строку CoInitFlags := COINIT_MULTITHREADED;, то иконки отображаются нормально. Есть у кого-нибудь какие-нибудь идеи, как связана com threading model и локальная копия system image list и почему это происходит?
GreyWolf (2009-12-14 12:22:00) [1]Очевидно да. Помимо порчи иконок, при использовании CoInitializeEx(nil, COINIT_MULTITHREADED); и последущем создании пары объектов-интерфейсов , под Windows 7 при попытке открытия OpenDialog программа просто подвисала. Нечто подобное описано здесь http://support.microsoft.com/default.aspx?scid=kb;en-us;828643и здесь
http://groups.google.com/group/microsoft.public.vc.mfc/browse_thread/thread/4e21c97b21457941.Странно как-то: вроде такая функция (режим) работы с COM в системе предусмотрен, но использовать его не получается.
clickmaker (2009-12-14 11:53:00) [2]> иконки портились для Html и htm если они зарегистрированы
> для Explorer или Opera. Если они были зарегистрированы для
> FireFox, то они не портились
ну это как-то с COM связано
у FF иконка так указана: C:\Program Files\Mozilla Firefox\firefox.exe,1, то есть тупо из файла достается
у IE - "%1", т.е. там как-то задействованы интерфейсы.
По той же причине, скорей всего, OpenDialog не открывает ни одну из спецпапок (типа "мои документы") в MT
GreyWolf (2009-12-12 18:11:00) [3]Спасибо за консультауию. Решил проблему заменой логики работы на модель с COINIT_APARTMENTTHREADED, так как multi-threaded в общем-то в данном случае и не требовалось, просто было чуть удобнее.
Обнаружил, что иконки портились для Html и htm если они зарегистрированы для Explorer или Opera. Если они были зарегистрированы для FireFox, то они не портились. Странное поведение, честно говоря, какие-то непонятные недоработки в Windows.
clickmaker (2009-12-12 15:14:00) [4]очевидно, это связано с тем, что shell-компоненты винды умеют правильно работать только в STA режиме.
можно так выкрутиться, если уж очень надо в мультитреде работать
CoUninitialize;
CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
OpenDialog.Execute;
...
CoUninitialize;
CoInitializeEx(nil, COINIT_MULTITHREADED);
GreyWolf (2009-12-12 15:10:00) [5]
> всегда один и тот же набор расширений?
Да.
clickmaker (2009-12-12 14:46:00) [6]> Например, .html.
всегда один и тот же набор расширений?