J'ai cherché sur le net dans différents forums pour trouver une réponse, mais il semble qu'il n'y ait pas de réponse à mon cas...
Je travaille sous Windows 7, VS2010.
J'ai une application qui utilise une minuterie pour appeler une fonction de rafraîchissement de la barre des tâches. Dans cette fonction de la barre des tâches se trouve un appel à LoadImage() qui obtient une image d'icône à partir des fichiers de ressources et éventuellement dans la barre des tâches (avec shell_notifyicon). Lors de l'exécution de l'application, cela semble fonctionner correctement pendant les deux premières heures, mais tout à coup, la fonction LoadImage() commence à échouer (c'est toujours le même fichier .ico qu'elle essaie de charger) et renvoie NULL. J'ai inséré un appel GetLastError juste après mais il renvoie toujours 0 (indiquant le succès). L'image elle-même est toujours bonne et valide, et je n'ai aucun moyen d'expliquer cela.
Un indice ? Toute aide est très appréciée !
Voici un extrait de code :
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);
}