VC++资源的加载和释放问题
最近看了很多关于VC++资源加载和释放的帖子,可自己就动手做了一下,结果资源释放失败,主要代码如下:
HRSRC hResource = ::FindResource(GetModuleHandle(NULL),
MAKEINTRESOURCE("testdata"),
"server");
if (hResource == NULL)
{
MessageBox(TEXT("无法找到资源文件!"));
return ;
}
//开始释放资源文件
HGLOBAL hGlobal;
DWORD dwSize; //EXE资源文件的大小
DWORD dwWritten; //WriteFile函数使用
HANDLE hFile;
hFile = CreateFile("c:\\tesa.dat",GENERIC_WRITE,FILE_SHARE_READ,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
MessageBox(TEXT("无法创建输出文件!"));
return ;
}
hGlobal = LoadResource(GetModuleHandle(NULL),hResource);
dwSize = SizeofResource(GetModuleHandle(NULL),hResource);
WriteFile(hFile,hGlobal,dwSize,&dwWritten,NULL);
if (dwWritten < dwSize)
{
MessageBox(TEXT("写入文件时发生错误!"));
return ;
}
CloseHandle(hFile);
server是资源类型,testdata是资源名称。编译出来的程序明显增加很多,说明资源还是在程序里了,可就是找不到,或是释放出来以后是空的。
[解决办法]
- C/C++ code
BOOL CTestDlg::ReleaseRes(CString strFileName,WORD wResID,CString strFileType) { // 资源大小 DWORD dwWrite=0; // 创建文件 HANDLE hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if ( hFile == INVALID_HANDLE_VALUE ) { return FALSE; } // 查找资源文件中、加载资源到内存、得到资源大小 HRSRC hrsc = FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType); HGLOBAL hG = LoadResource(NULL, hrsc); DWORD dwSize = SizeofResource( NULL, hrsc); // 写入文件 WriteFile(hFile,hG,dwSize,&dwWrite,NULL); CloseHandle( hFile ); return TRUE; }