有没有办法在c ++(Win32 API)静态库中嵌入资源(如图标,对话框)? 我的目的是在静态库中嵌入一个图标,使用LoadIcon的函数就像普通的.exe一样工作,因此主应用程序只能链接到静态库并包含头文件,不需要添加其他文件,如.rc文件或.ico文件等。 显然,使用静态库的主要应用程序没有此资源,因此LoadIcon将失败,但我想知道是否有解决方法使其工作。只要标准API调用(例如LoadIcon)可以工作,带有图标数据的静态数组就可以工作。
为了进一步解释,将使用静态库的人只有2个文件:.lib和.h,并且没有任何.rc文件。
答案 0 :(得分:1)
我发布了一个答案,因为经过一些研究我发现了一种方法。使用我的方法,图标可以用作静态库的组成部分,这样的库可以被任何类型的应用程序使用)。 另见:https://www.codeproject.com/Articles/1275122/How-to-embed-resources-in-a-Static-Library
数据转换为HICON句柄。我是这样做的:
HICON GetIcon()
{
DWORD dwTmp;
int offset;
HANDLE hFile;
HICON hIcon = NULL;
offset = LookupIconIdFromDirectoryEx(s_byIconData, TRUE, 0, 0, LR_DEFAULTCOLOR);
if (offset != 0)
{
hIcon = CreateIconFromResourceEx(s_byIconData + offset, 0, TRUE, 0x00030000, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE);
}
return hIcon;
}
使用GetIcon代替LoadIcon。 而不是打电话:
m_hIcon = ::LoadIcon(hInstanceIcon, MAKEINTRESOURCE(pXMB->nIcon));
我打电话
m_hIcon = GetIcon()