Форум: "WinAPI";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизУстановка CoInitFlags в COINIT_MULTITHREADED портит иконки файлов Найти похожие ветки
← →
GreyWolf © (2009-12-12 13:23) [0]Добрый день.
Когда я в 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 и почему это происходит?
← →
clickmaker © (2009-12-12 14:46) [1]> Например, .html.
всегда один и тот же набор расширений?
← →
GreyWolf © (2009-12-12 15:10) [2]
> всегда один и тот же набор расширений?
Да.
← →
clickmaker © (2009-12-12 15:14) [3]очевидно, это связано с тем, что shell-компоненты винды умеют правильно работать только в STA режиме.
можно так выкрутиться, если уж очень надо в мультитреде работать
CoUninitialize;
CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
OpenDialog.Execute;
...
CoUninitialize;
CoInitializeEx(nil, COINIT_MULTITHREADED);
← →
GreyWolf © (2009-12-12 18:11) [4]Спасибо за консультауию. Решил проблему заменой логики работы на модель с COINIT_APARTMENTTHREADED, так как multi-threaded в общем-то в данном случае и не требовалось, просто было чуть удобнее.
Обнаружил, что иконки портились для Html и htm если они зарегистрированы для Explorer или Opera. Если они были зарегистрированы для FireFox, то они не портились. Странное поведение, честно говоря, какие-то непонятные недоработки в Windows.
← →
clickmaker © (2009-12-14 11:53) [5]> иконки портились для Html и htm если они зарегистрированы
> для Explorer или Opera. Если они были зарегистрированы для
> FireFox, то они не портились
ну это как-то с COM связано
у FF иконка так указана: C:\Program Files\Mozilla Firefox\firefox.exe,1, то есть тупо из файла достается
у IE - "%1", т.е. там как-то задействованы интерфейсы.
По той же причине, скорей всего, OpenDialog не открывает ни одну из спецпапок (типа "мои документы") в MT
← →
GreyWolf © (2009-12-14 12:22) [6]Очевидно да. Помимо порчи иконок, при использовании 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 в системе предусмотрен, но использовать его не получается.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.061 c