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);//若写入大小等于文件大小,返回成功,否则失败
}
自此操作完成。。。