引入资源输出文件的类的封装

这里附上 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值