資原始檔讀取_檔案_VC技術文章_VC源動力

chief1985發表於2008-10-10
導讀:

有時我們會在資源里加上一些檔案,BMP、ICON、WAVE等檔案讀取時沒什麼問題,

主要的區別在於RT_TOOLBAR,RT_MENU,RT_...

HINSTANCE hInst = AfxFindResourceHandle(lpszResourceName, RT_TOOLBAR);
HRSRC hRsrc = ::FindResource(hInst, lpszResourceName, RT_TOOLBAR);
if (hRsrc == NULL)
return FALSE;

HGLOBAL hGlobal = LoadResource(hInst, hRsrc);
if (hGlobal == NULL)
return FALSE;

CToolBarData* pData = (CToolBarData*)LockResource(hGlobal);

而對於其它檔案呢 進行加入普通的資源一樣,然後用我下面的函式就可以了:
//
// 從資源中讀取資料
//
LONG GetDataFromRes(PBYTE pData,UINT nIDResource)
{
// 將資源ID轉成資源名稱
LPSTR szResourceName = MAKEINTRESOURCE(LOWORD(nIDResource));

// 資源的型別
LPSTR szResourceType = "BIN_DATA";

// 查詢資源控制程式碼
HRSRC hRes = FindResource(NULL, szResourceName,szResourceType);

// 獲得資源資料的控制程式碼
HGLOBAL hResData;
if (!hRes || !(hResData = LoadResource(NULL,hRes)))
{
return -1;
};
// 資源資料的大小
DWORD dwSize = SizeofResource(NULL,hRes);
if(pData == NULL)
{
return dwSize;
}
// 資源加鎖
PBYTE pSrc = (PBYTE)LockResource(hResData);
if (!pSrc)
{
FreeResource(hResData);
return -1;
};
// 複製資料
CopyMemory(pData,pSrc,dwSize);
// 釋放資源
FreeResource(hResData);
return dwSize;
}
//
// DUMP生成檔案
//
BOOL MakeFileFromData(PBYTE pData,LONG lSize,LPCSTR lpszFilePath)
{
if(pData == NULL || lpszFilePath == NULL || lpszFilePath[0] == '/0')
return FALSE;
HANDLE hFile = CreateFile(
lpszFilePath,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_HIDDEN,
NULL
);
if(hFile == INVALID_HANDLE_VALUE)
{
return FALSE;
}
DWORD dwWrited = 0;
BOOL bRet = WriteFile(hFile,pData,lSize,&dwWrited,NULL);
CloseHandle(hFile);
return bRet;
}

本文轉自
http://www.xiaozhou.net/ReadNews.asp?NewsID=225

相關文章