【发布时间】:2011-06-05 10:00:46
【问题描述】:
我一直在不同论坛的网上搜索答案,但似乎与我的情况不匹配......
我正在使用 Windows 7,VS2010。
我有一个使用计时器来调用任务栏刷新功能的应用程序。在该任务栏函数中调用 LoadImage(),它从资源文件中获取图标图像,并最终到达 taskber(使用 shell_notifyicon)。运行应用程序时,前几个小时似乎工作正常,但突然之间 LoadImage() 开始失败(它总是尝试加载相同的 .ico 文件)并返回 NULL。我在之后直接插入了一个 GetLastError 调用,但它总是返回 0(表示成功)。 图像本身仍然是好的和有效的,我无法解释。
有什么线索吗? 非常感谢任何帮助!
这是一个代码sn-p:
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 对象