/**
@Name: ReleaseResFile
@Brief 释放资源文件
@Param: WORD wResID 资源ID
@Param: LPCTSTR szResType 资源类型
@Param: LPCTSTR szFileName 释放后的文件名称
@Return: 成功TRUE,释放FALSE
*/
BOOL ReleaseResFile(WORD wResID, LPCTSTR szResType, LPCTSTR szFileName)
{
if (szResType == NULL || szFileName == NULL)
{
return FALSE;
}
// 创建文件
DWORD dwShareMode = FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE;
HANDLE hFile = CreateFile(szFileName, GENERIC_WRITE, dwShareMode, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE )
{
return FALSE;
}
HRSRC hrsc = FindResource(NULL, MAKEINTRESOURCE(wResID), szResType); // 查找资源
HGLOBAL hG = LoadResource(NULL, hrsc); // 加载资源
DWORD dwSize = SizeofResource(NULL, hrsc); // 获取资源大小
if(dwSize <= 0)
{
return FALSE;
}
// 写入文件
DWORD dwWrite = 0;
WriteFile(hFile, hG, dwSize, &dwWrite, NULL);
CloseHandle(hFile);
return dwWrite > 0;
}
----------------------------------------------------------
// 释放资源DLL
CHAR szProxyDLL[MAX_PATH] = {0};
GetModuleFileName(NULL, szProxyDLL, sizeof(szProxyDLL));
PathRemoveFileSpec(szProxyDLL);
CString strProxyDLL(szProxyDLL);
strProxyDLL += "\\ProxyDLL.dll";
ReleaseResFile(IDR_PROXY_DLL, "DLL", strProxyDLL.GetBuffer());