以二进制资源为例,这样可以在资源保存任何形式的数据,包括.exe文件等。
HRSRC hRes = NULL;
HGLOBAL hResData = NULL;
DWORD dwSize = 0;
BYTE* pSrc = NULL;
HINSTANCE hInst = AfxFindResourceHandle(MAKEINTRESOURCE(IDR_BIN_DSUM), L"BIN");
hRes = ::FindResource(hInst, MAKEINTRESOURCE(IDR_BIN_DSUM), L"BIN");
if (!hRes)
{
UpdateLog(::Error, L"(GenerateDSUMFile): Could not find the resource (ErrorCode: %d).", GetLastError());
return false;
}
hResData = ::LoadResource(hInst, hRes);
if (!hResData)
{
return false;
}
dwSize = SizeofResource(hInst, hRes);
pSrc = (PBYTE)LockResource(hResData);
if (!pSrc)
{
FreeResource(hResData);
return false;
}
CFile file(sFileName, CFile::modeCreate | CFile::modeReadWrite | CFile::typeBinary);
file.Write(pSrc, dwSize);
file.Close();
FreeResource(hResData);
return true;
其中MAKEINTRESOURCE(IDR_BIN_DSUM)用于将资源转换为字符串,但是此字符串只能用于FindResource,LoadResource等函数,并不能赋予字符串变量。
在DLL或ATL的COM组件中,需要使用
HINSTANCE hInst = AfxFindResourceHandle(MAKEINTRESOURCE(IDR_BIN_DSUM), L"BIN");
获得资源所在的模块句柄。在EXE中可以使用NULL作为第一个参数。