CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请教将一个二进制文件以资源的方式导入程序后等需要使用时应该如何处理?

楼主finalcrasher(河豚)2003-11-01 22:16:29 在 VC/MFC / 基础类 提问

我将一个二进制文件(*.bin)以资源的方式导入程序,类型名为"rc"。我需要在程序执行时导出这个二进制文件并还原为*.bin然后再将它复制到指定的文件夹里去。我的做法是这样的:  
   
  HINSTANCE   hLib   =   LoadLibraryEx("tmp.exe",   NULL,   LOAD_LIBRARY_AS_DATAFILE);  
  HRSRC   hRsrc   =   FindResource(hLib,   MAKEINTRESOURCE(IDR_RC1),   RT_RCDATA);  
  HGLOBAL   hGlobal   =   LoadResource(hLib,   hRsrc);  
  LPVOID   binfile   =   LockResource(hGlobal);  
  上面的"tmp.exe"就是此二进制文件所在的主程序的名称,但接下来我就不知道该如何做了,希望各位指教,谢谢! 问题点数:50、回复次数:4Top

1 楼rainbowinfog(朝夕)回复于 2003-11-01 22:59:19 得分 25

从资源中提取文件LoadFile函数如下:  
  UINT   LoadFile(WORD   id,   char*&   pData)  
  {  
  HRSRC hResInfo   =   NULL;  
  pData   =   NULL;  
  LPVOID pResData   =   NULL;  
  HGLOBAL   hResData   =   NULL;  
  HMODULE   hModule   =   NULL;  
  UINT nSize   =   0;  
   
  hModule   =   GetModuleHandle(NULL);  
  hResInfo   =   FindResource(hModule,   MAKEINTRESOURCE(id),   "BIN");//BIN这种资源类型事先要注册。  
   
  if(hResInfo)  
  {  
  hResData   =   LoadResource(hModule,   hResInfo);  
  nSize   = SizeofResource(hModule,   hResInfo);  
   
  if(hResData   &&   nSize>0)  
  {  
  LPVOID   pResData   =   LockResource(hResData);  
   
  pData   =   new   char[nSize+1];  
  memset(pData,   0,   nSize+1);  
  memcpy(pData,   pResData,   nSize);  
   
  UnlockResource(hResData);  
  }  
  }  
  return   nSize;  
  }  
   
  调用的时候这样:  
  nSize   =   LoadFile(IDR_BIN1,   pFileData);  
  if(nSize   >   0)  
  {  
  HANDLE   hFile=CreateFile(szBinname,  
  GENERIC_READ|GENERIC_WRITE,  
  0,NULL,OPEN_ALWAYS,  
  FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);  
  DWORD   dwWritten;  
  WriteFile(hFile,   (LPVOID)pFileData,nSize,&dwWritten,NULL);  
   
  CloseHandle(hFile);  
  delete   pFileData;  
  pFileData   =   NULL;  
  nSize   =   0;  
  }  
  }Top

2 楼zjlgigi(外星人)回复于 2003-11-01 23:04:50 得分 25

你已经完成了开始的工作了  
  binfile就是指向你的资源  
   
  你可以考虑以下这样做:  
  FILE   *fp=fopen("test.bin","wb+");  
  while   (bin的size   >   i   )  
  {  
  fprintf(fp,(char)*binfile);  
  ...  
  binfile++;  
  }  
  fclose(fp);Top

3 楼Saimen(沉默是金)回复于 2003-11-01 23:13:43 得分 0

楼上的说的不错Top

4 楼finalcrasher(河豚)回复于 2003-11-02 09:39:40 得分 0

非常感谢大家!Top

相关问题

  • 二进制文件?
  • 使用VB开发CGI程序怎么提交二进制文件呢?
  • 请问谁可以帮助编一个二进制文件合并的程序
  • 二进制文件加密程序,欢迎提出修改意见!!
  • python的程序可以编译成二进制可执行文件么?
  • 如何把一个二进制文件编译到程序当中
  • 如何将一个二进制的文件嵌入到c程序或库中?
  • 关于二进制文件
  • 写二进制文件
  • 二进制文件读写

关键词

  • 二进制
  • 文件
  • null
  • nsize
  • pfiledata
  • hresdata
  • binfile
  • 二进制文件
  • hresinfo
  • hmodule

得分解答快速导航

  • 帖主:finalcrasher
  • rainbowinfog
  • zjlgigi

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo