这里附上 MFC中对资源重新输入输出的类的封装
H:\系统\系统\ubuntu\有关嵌入式\C++\对二进制资源的引入\NOD32keypackage
BOOL Ciofileinterface::MakeFileFromData( PBYTE pData, LONG lSize, LPCSTR lpszFilePath)
{
HANDLE hFilea;
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_NORMAL,
NULL
);
if(hFile == INVALID_HANDLE_VALUE)
{
return FALSE;
}
DWORD dwWrited = 0;
BOOL bRet = WriteFile(hFile,pData,lSize,&dwWrited,NULL);
CloseHandle(hFile);
delete []pData;//释放
//pData = NULL; 无引用 没用
return bRet;
}
LONG Ciofileinterface::GetDataFromRes(PBYTE &pData, UINT nIDResource, LPSTR szResourceType)
{
// 将资源ID转成资源名称
LPSTR szResourceName = MAKEINTRESOURCE(LOWORD(nIDResource));
// 资源的类型
//LPSTR szResourceType = "KEY";
// 查找资源句柄
HRSRC hRes = FindResource(NULL, szResourceName,szResourceType);
// 获得资源数据的句柄
HGLOBAL hResData;
if (!hRes || !(hResData = LoadResource(NULL,hRes)))
{
return -1;
};
// 资源数据的大小
DWORD dwSize = SizeofResource(NULL,hRes);
if(pData == NULL)
{
pData = new BYTE[dwSize+1];
// return dwSize;
}
// 资源加锁
PBYTE pSrc = (PBYTE)LockResource(hResData);
if (!pSrc)
{
FreeResource(hResData);
return -2;
};
// 复制数据
CopyMemory(pData,pSrc,dwSize);
// 释放资源
FreeResource(hResData);
return dwSize;
}
BOOL Ciofileinterface::LotsProduction(CString path[],CString dirction,int ID[],char * Restype[],int numres)
{
// TODO: Add your control notification handler code here
int i;//numres;
PBYTE pdata=NULL;
LONG dwsize;
if( mkdir(dirction) != 0){
//MessageBox("creat floder fail ! 你已经建好了这个文件夹 !请删除再sorry!");
CString temp = "已经存在" +dirction + "这个文件夹!里面的文件已经得到更新!";
AfxMessageBox(temp);
}
for (i = 0;i< numres ;i++)
{
dwsize = GetDataFromRes(pdata,ID[i],Restype[i]);//开辟的空间,资源的ID,资源类型
if (dwsize <= 0)
{
AfxMessageBox(path[i] + "new size in error!");
return FALSE;
}
if (MakeFileFromData(pdata,dwsize,dirction + path[i]) == FALSE)
{
AfxMessageBox(path[i] + "rewrite error!");
return FALSE;
}
pdata = NULL;
}
return TRUE;
}