Я искал ответ по сети на разных форумах, но, похоже, не соответствует моему делу ...
Я работаю в Windows 7, VS2010.
У меня есть приложение, которое использует таймер для вызова функции обновления панели задач.В этой функции панели задач находится вызов LoadImage (), который получает изображение значка из файлов ресурсов и, в конечном итоге, в панель задач (с shell_notifyicon).При запуске приложения это, кажется, работает нормально в течение первых нескольких часов, но затем внезапно происходит сбой LoadImage () (это всегда тот же файл .ico, который он пытается загрузить) и возвращает NULL.Я вставил вызов GetLastError сразу после этого, но он всегда возвращает 0 (указывает на успех).Само изображение все еще хорошее и правильное, и я не могу объяснить это.
Есть какие-нибудь подсказки?Любая помощь очень ценится!
Вот фрагмент кода:
if (ghInst && hwnd)
{
DWORD err;
// Update Tray Icon Here
small_icon=LoadImage(ghInst, MAKEINTRESOURCE(IconId), IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0);
err = GetLastError();
if (!small_icon)
{
LPVOID lpMsgBuf;
//DWORD err = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
err,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
printf("LoadImage FAILED error message: %d %s\n" ,err ,lpMsgBuf);
}
nid.uFlags=NIF_MESSAGE | NIF_ICON | NIF_TIP;
nid.uCallbackMessage=UWM_SYSTRAY;
nid.hIcon=small_icon; /* 16x16 icon */
if (bIconExist)
Shell_NotifyIcon(NIM_MODIFY, &nid);
else
Shell_NotifyIcon(NIM_ADD, &nid);
}