以二進位資源為例,這樣可以在資源儲存任何形式的資料,包括.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作為第一個參數。