首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VC++资源的加载和释放有关问题

2012-04-18 
VC++资源的加载和释放问题最近看了很多关于VC++资源加载和释放的帖子,可自己就动手做了一下,结果资源释放

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;  } 

热点排行