gpt4 book ai didi

c - LoadImage() 返回 NULL 和 GetLastError() 返回 0

转载 作者:可可西里 更新时间:2023-11-01 10:08:51 30 4
gpt4 key购买 nike

我一直在网上的不同论坛上搜索答案,但似乎没有与我的情况相符的...

我正在使用 Windows 7,VS2010。

我有一个使用定时器来调用任务栏刷新功能的应用程序。在该任务栏函数中包含对 LoadImage() 的调用,该调用从资源文件中获取图标图像,并最终发送给 taskber(使用 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);
}

最佳答案

我认为问题几乎可以肯定是您泄漏了 GDI 对象并且用完了 GDI 对象句柄。标准的 Windows 任务管理器可以显示您的进程的 GDI 对象计数。

您没有使用 LR_SHARED 调用 LoadImage,因此您必须随后使用 DestroyIcon 释放图标。请参阅 LoadImage 文档的“备注”部分:

http://msdn.microsoft.com/en-us/library/ms648045%28v=VS.85%29.aspx

(顺便说一句,您还应该释放 FormatMessage 分配的字符串。)

关于c - LoadImage() 返回 NULL 和 GetLastError() 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6242193/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com