win32 3步打包和释放资源

来源:互联网 发布:淘宝达人资历怎么写 编辑:程序博客网 时间:2024/05/16 12:45

1.在rc文件里添加

IDR_EXE1                EXE                     "..\\res\\A.exe"
IDR_ZIP2                ZIP                     "..\\res\\B.zip"


2.在resource.h头文件里添加定义

#define IDR_EXE1                        104
#define IDR_ZIP2                        105


1+2后,程序编译时a.exe和b.zip就在生成的exe程序里了,下面是释放操作


3.释放资源

void main(){FreeResFile(IDR_EXE1, L"EXE",  "d:\\a.exe"); FreeResFile(IDR_ZIP2, L"ZIP",  "d:\\b.zip");}




/*
函数功能:释放资源文件
参数说明:DWORD dwResName   指定要释放的资源ID号,如IDR_EXE
LPCSTR lpResType 指定释放的资源的资源类型
LPCSTR lpFilePathName 指定释放后的目标文件名
返回值:成功则返回TRUE,失败返回FALSE
*/
 

bool CRes::FreeResFile(unsigned long dwResName, char* lpResType, char* lpFilePathName){HMODULE hInstance = ::GetModuleHandle(NULL);//得到自身实例句柄  HRSRC hResID = ::FindResource(hInstance, MAKEINTRESOURCE(dwResName), lpResType);//查找资源  HGLOBAL hRes = ::LoadResource(hInstance, hResID);//加载资源  LPVOID pRes = ::LockResource(hRes);//锁定资源  if (pRes == NULL)//锁定失败  {return FALSE;}DWORD dwResSize = ::SizeofResource(hInstance, hResID);//得到待释放资源文件大小  remove(lpFilePathName);  //清理已存在的文件 ---保证CreateFile的成功率HANDLE hResFile = CreateFile(lpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);//创建文件  if (INVALID_HANDLE_VALUE == hResFile){//TRACE("创建文件失败!");  return FALSE;}DWORD dwWritten = 0;//写入文件的大小     WriteFile(hResFile, pRes, dwResSize, &dwWritten, NULL);//写入文件  CloseHandle(hResFile);//关闭文件句柄  return (dwResSize == dwWritten);//若写入大小等于文件大小,返回成功,否则失败   }



自此操作完成。。。


原创粉丝点击