将可执行文件以资源的方式加入到另一个可执行文件并释放

来源:互联网 发布:java实现文件上传下载 编辑:程序博客网 时间:2024/05/22 04:56

添加资源非常简单,这里贴出释放代码

//创建文件bool CttDlg::CreateMyFile(CString strFilePath,LPBYTE lpBuffer,DWORD dwSize){HANDLE hFile = CreateFile(strFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);if (hFile != NULL){//实际写入到文件的字节数DWORD dwWritten;WriteFile(hFile, (LPCVOID)lpBuffer, dwSize, &dwWritten, NULL);}else{return false;}CloseHandle(hFile);return true;}//创建EXEbool CttDlg::CreateEXE(CString strFilePath,int nResourceID,CString strResourceName){// 查找所需的资源HRSRC hResInfo = FindResource(NULL, MAKEINTRESOURCE(nResourceID), strResourceName);if (hResInfo == NULL){//MessageBox(NULL, "查找资源失败!", "错误", MB_OK | MB_ICONINFORMATION);return false;}// 获得资源尺寸DWORD dwSize = SizeofResource(NULL, hResInfo);// 装载资源HGLOBAL hResData = LoadResource(NULL, hResInfo);if (hResData == NULL){//MessageBox(NULL, "装载资源失败!", "错误", MB_OK | MB_ICONINFORMATION);return false;}// 为数据分配空间LPBYTE pFileMem = (LPBYTE)GlobalAlloc(GPTR, dwSize);if (pFileMem == NULL){//MessageBox(NULL, "分配内存失败!", "错误", MB_OK | MB_ICONINFORMATION);return false;}// 复制资源数据CopyMemory((LPVOID)pFileMem, (LPCVOID)LockResource(hResData), dwSize);//将内存映射到文件bool bRet = CreateMyFile(strFilePath,pFileMem,dwSize);if(!bRet){GlobalFree((HGLOBAL)pFileMem);return false;}//释放内存数据GlobalFree((HGLOBAL)pFileMem);return true;}void CttDlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码//获取当前目录char UpxPath[MAX_PATH];memset(UpxPath,0,MAX_PATH);GetCurrentDirectory(MAX_PATH,UpxPath);//找到fsg压缩工具strcat(UpxPath,"\\fsg.exe");CreateEXE(UpxPath,IDR_EXE_XUNLEI,"exe");OnOK();}


0 0
原创粉丝点击