Главная страница
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.072 c
2-1334754032
andrewtitoff
2012-04-18 17:00
2013.03.22
Картинки в массив и обратно


15-1352053320
Artem
2012-11-04 22:22
2013.03.22
Где internet explorer хранит куки в windows 7?


15-1346063472
>|<
2012-08-27 14:31
2013.03.22
Локализация утечки памяти


15-1330983798
Дмитрий С
2012-03-06 01:43
2013.03.22
Зачем нужен IFDEF POSIX?


2-1330269660
Незнающий усталости
2012-02-26 19:21
2013.03.22
Как задать фокус ячейки?