Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2013, 20:12   #1
JackyBrown
Новичок
Джуниор
 
Регистрация: 07.04.2013
Сообщений: 5
По умолчанию Необработанное исключение в 0x77de4621

Друзья, добрый день. Прошу помощи голову уже "сломал".
Ситуация следующая. Есть элемент управления CTreeCtrl, в нем перечень процессов. Все ОК! Решил добавить иконки для каждого процесса - для наглядности красивости (и понтов :-)...
Добавил три строчку кода для каждого элемента перед добавлением элемента в список...

hIcon = ExtractIcon( AfxGetInstanceHandle(), szExeFile, 0 );
tvItem.item.iImage = ImageList.Add ( hIconSmall );
DestroyIcon( hIcon );

И тут начинается странное поведение приложения. Во первых, иконки начал получать - но х.. поймешь что за иконки. После 10 "прогонов" (по F5) вообще стал получать сообщение "Необработанное исключение в 0x77de4621..." и выпадать в "Afxstate.cpp" AfxDeactivateActCtx.

C функцией
ExtractIconEx( szExeFile, 0, &hIconBig, &hIconSmall, 1 );
ситуация аналогичная!

Причем ставлю брейкпоинт на вызове ExtractIcon/ExtractIconEx по F5 4 раза выполняется (в цикле) на 5-ый вылетает ошибка "Необработанное исключение..."

ExtractAssociatedIcon - выполняется, но иконка у почти у всех процессов одинаковая в стиле х... поймешь.

Полное сообщение об ошибке:
Необработанное исключение в "0x77de4621" в "application.exe": 0xC015000F: Деактивируемый контекст активации не является последним активированным контекстом.

Если нажать кнопку "Пропустить", то окно программы отображается но элемент управления не растянут по высоте - не заполняет фрейм, а остается по высоте в 100 пикселей (как при создании фрейма сплиттера).

Прошу помочь - что за ошибка 0xC015000F, почему приложение "спотыкается" только при вызове ExtractIcon/ExtractIconEx?
Если можно примером работающим с извлечением иконок из файлов киньте в меня, пожалуйста.

Windows 7 x64 MSVS 2008 MFC
JackyBrown вне форума Ответить с цитированием
Старый 08.04.2013, 00:31   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Вы пробовали проверять возвращаемые значения?
ImageList.Add создает новую копию объекта, чтобы Вы смогли удалить ненужный объект (DestroyIcon) ?
counter вне форума Ответить с цитированием
Старый 08.04.2013, 09:59   #3
JackyBrown
Новичок
Джуниор
 
Регистрация: 07.04.2013
Сообщений: 5
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
Вы пробовали проверять возвращаемые значения?
Вы, немного не внимательно прочитали предыдущее сообщение.

Вылетает именно на вызове ExtractIcon/ExtractIconEx. На следующую строчки кода управление не передается!

Получается падает сама ExtractIcon/ExtractIconEx. Но вот тогда что за ошибка?
JackyBrown вне форума Ответить с цитированием
Старый 08.04.2013, 12:02   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

У Вас, между прочим, в вызове ExtractIcon есть еще один вызов...

Неплохо было бы увидеть:
1. Кусок кода с объявлениями переменных
2. Стек из ексепшена


На форумах пишут , что это должно помочь:

Код:
CWinApp::InitInstance();
afxAmbientActCtx = FALSE; // <<-- Add this line
counter вне форума Ответить с цитированием
Старый 09.04.2013, 14:52   #5
JackyBrown
Новичок
Джуниор
 
Регистрация: 07.04.2013
Сообщений: 5
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
У Вас, между прочим, в вызове ExtractIcon есть еще один вызов...
AfxGetInstanceHandle () возвращает инстанс приложения для вызова ExtractIcon. В принципе, можно передать 0.

У меня встречный вопрос. Ситуация следующая есть приложение "nvtray.exe". Если я открываю папку, содержащую этот файл, то вижу иконку, которую отображает проводник виндоус (фирменная иконка nvidia). Теперь я вызываю ExtractIcon и передаю ей путь до этого самого файла (nvtray.exe). И что? А ни чего - пусто. Причем для некоторых других файлов иконки экстрактируются.
Как то проводник "выщемляет" иконку - и делает это очень просто... Как?
Как выясняется не только берет иконку с наименьшим индексом (т.е. 0)...
JackyBrown вне форума Ответить с цитированием
Старый 13.04.2013, 18:34   #6
QunneD
C++ &amp;amp; PHP &amp;amp; Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

Посмотрев навскидку, подозреваю, что Вы неправильно оперируете с указателями.

И пользуйтесь GetLastError для выявления кода последней неудачной операции.
QunneD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Explorer.exe Исключение неизвестное программное исключение Windows XP, что делать? Igorilla Windows 6 02.04.2013 22:49
Необработанное win 32 исключение произошло cska Косторных Помощь студентам 2 05.01.2013 22:41
Необработанное исключение Faton 11 Общие вопросы C/C++ 4 31.10.2012 00:29
C++ Error Необработанное исключение...нарушение прав доступа Alt_Shift Помощь студентам 1 24.05.2012 12:55
Ошибка: Необработанное исключение типа "System.IO.FileNotFoundExceptio n" MoT9I Visual C++ 1 27.11.2011 12:31