Почему иногда происходит сбой приложения при получении Icon из файла? - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть функции для загрузки и получения Icon из файлов следующим образом:

std::map<wstring, HICON> m_map_icons;

void WindowSysTray::_loadIconFromFiles()
{
    ...
    for (int i = 0; i < 3; ++i) {
        wstring temp = path + trayList[i];
        HICON hIcon = NULL;
        Gdiplus::Bitmap bitmap(temp.c_str(), false);
        bitmap.GetHICON(&hIcon);
        pair<wstring, HICON> _pair = make_pair(trayList[i], hIcon);
        m_map_icons.insert(_pair);
    }
}

HICON WindowSysTray::getIconFromFile(const wchar_t* iconPath)
{
    auto iter = m_map_icons.find(wstring(iconPath));
    if (iter == m_map_icons.end()) {
        return NULL;
    }
    else {
        return iter->second; // ---Issue here---
    }
}

...
hIcon = getIconFromFile(L"tray.png");
if (hIcon)
{
    TrayIcon.SetIcon(hIcon);
}
...

При вызове функции getIconFromFile иногда происходит сбой при возврате значения в конце функции:

return iter-> second;

Я проверил и убедился, что загружал Icon раньше, вызывая функцию _loadIconFromFiles.

Кто-нибудь знает, что это возможно?первопричина этой проблемы?

1 Ответ

0 голосов
/ 27 сентября 2018

m_map_icons.find() может пойти не так.Это может быть в случае, если m_map_icons пусто.Вы можете начать WindowSysTray::getIconFromFile с проверки: if (m_map_icons.size() == 0) return 0;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...