我一直在周围的答案不同的论坛网上搜索,但似乎没有匹配我的情况......的LoadImage()返回NULL和GetLastError()返回0
我的工作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);
}
使用Process Explorer的检查,你是不是泄漏GDI对象 – 2011-06-05 10:33:43