Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.047 c
15-1339965003
Юрий
2012-06-18 00:30
2013.03.22
С днем рождения ! 18 июня 2012 понедельник


15-1335356229
AV
2012-04-25 16:17
2013.03.22
Кодировка русских путей при запуске bat, сделанного в NotePad


15-1352554012
Артём
2012-11-10 17:26
2013.03.22
Написание программ


15-1342297802
Юрий
2012-07-15 00:30
2013.03.22
С днем рождения ! 15 июля 2012 воскресенье


15-1347000404
ford
2012-09-07 10:46
2013.03.22
алгоритм для анализа изображения




   Наверх