C++ LoadIcon()/LoadImage()失败,错误代码为0x00000715

C++ LoadIcon()/LoadImage()失败,错误代码为0x00000715,c++,winapi,visual-c++,C++,Winapi,Visual C++,我试图在Windows任务栏桌面带中加载图标,但总是失败,错误代码为0x00000715(在图像文件中找不到指定的资源类型)。我已经包含了resource.h文件,它包含图标的id。下面是我用来加载图标的代码 m_hIcon = (HICON)LoadImage(m_hInst, MAKEINTRESOURCE(IDI_ICON_1), IMAGE_ICON, 32, 32, LR_SHARED); if (m_hIcon )

我试图在Windows任务栏桌面带中加载图标,但总是失败,错误代码为0x00000715(在图像文件中找不到指定的资源类型)。我已经包含了resource.h文件,它包含图标的id。下面是我用来加载图标的代码

m_hIcon = (HICON)LoadImage(m_hInst, MAKEINTRESOURCE(IDI_ICON_1), 
                                  IMAGE_ICON, 32, 32, LR_SHARED);
if (m_hIcon )
{
ATLTRACE(_T("Icon loaded successfully"));
}
else
{

ATLTRACE(_T("Couldnot load icon %x"),GetLastError());
}
我也尝试过使用LoadIcon()函数加载图标,但也失败了,出现了相同的错误

LoadIcon(m_hInst, MAKEINTRESOURCE(IDI_ICON_1));
编辑: 我使用ATL项目模板创建dll。

错误代码如下所述:

在映像文件中找不到指定的资源类型


这是相当明确的。由该模块句柄标识的模块没有具有该资源名称和类型的图标资源。您传递了错误的模块句柄,或者链接图标资源失败。

是否在资源文件(.rc)中创建了条目?我记不起如何在资源文件(.rc)中创建条目。(.rc)资源文件将包含resource.h include。尝试使用编辑器打开该文件,查看以前的一些条目(如果已经有),并使用该格式为您的图像/png文件创建一个条目,然后重试。该.rc文件有一个资源条目
IDI_图标\u 1图标“icon1.ico”
可能表明您正试图通过loadImage功能加载图标。使用LoadIcon并尝试。我已尝试了这两种方法。它们都不起作用。请使用NULL而不是m_hInst并进行检查。但我已验证图标文件是否存在于
资源文件
筛选器中,并且在Resource.h和.rc文件中都有定义。我认为值得一提的是,该项目被编译为一个dll,然后加载到explorer.exe(DeskBand)中,要么是传递了错误的模块句柄,要么是链接图标资源失败。使用资源查看器验证资源是否存在。使用该工具检查DLL。这将允许您100%确定资源是否存在。如果是,并且仍然返回该错误,则表明您传递了错误的模块句柄。资源存在于dll中(使用资源查看器验证)。我正在使用ATLProject模板创建dll。我尝试使用
\u AtlBaseModule.GetModuleInstance()
,但也不起作用。存在第三种错误模式:具有指定ID的图标作为资源链接到二进制文件中,但属于不同类型(例如原始二进制文件资源)。然而,这里的错误可能是错误的模块句柄:使用伪链接器变量将始终返回正确的模块句柄。我没有使用在dll内注册窗口类时创建的m_hInst,而是使用了_AtlBaseModule.GetResourceInstance(),这很有效。