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

tiger413 2012-04-12 11:37:08
最近看了很多关于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是资源名称。编译出来的程序明显增加很多,说明资源还是在程序里了,可就是找不到,或是释放出来以后是空的。
...全文
227 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiger413 2012-04-12
  • 打赏
  • 举报
回复
谢谢,我最后发现我传入的参数ID是char*类型的,所以找不到。
一叶之舟 2012-04-12
  • 打赏
  • 举报
回复

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

65,190

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧