Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Установка 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 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
15-1344181528
brother
2012-08-05 19:45
2013.03.22
Посоветуйте игру


11-1244317439
Lirk
2009-06-06 23:43
2013.03.22
Вариант решения проблемы...


15-1344537298
kilkennycat
2012-08-09 22:34
2013.03.22
Бибик


15-1349295678
ProgRAMmer Dimonych
2012-10-04 00:21
2013.03.22
Подсчёт ссылок на строку таблицы в MySQL


15-1338725627
картман
2012-06-03 16:13
2013.03.22
cuda