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

请教UPdateResource的API函数(修改可执行文件中的资源)如何调用,请给个例子好吗,谢谢!

楼主fengzhizhu(风之竹 KingOne)2003-02-01 23:42:40 在 Delphi / Windows SDK/API 提问

函数功能:该函数增加,删除,或替代某可执行文件中的资源。  
   
          函数原型:BOOL   UPdateResource(HANDLE   hUpdate,LPCTSTR   lPTyPe,LPCTSTR   IPName,WORD   wLanguage,LPVOID   lgData,DWORD   cbData);  
   
          参数:  
   
          hUpdate:指定更新文件句柄。此句柄由BeginUpdateResource函数返回。  
   
          lpType:指向说明将被更新的资源类型的字符串,它以NULL为终止符。这个参数可以是一个通过宏MAKENTRESOURCE传递的整数值,含义参见EnumResLangProc\lpType。  
   
          lpName:指向说明待被更新的资源名称的字符串,它以NULL为终止符。这个参数可以是一个通过宏MAKEINTRESOURCE传递的整数值。  
   
          wLanguage:指定将被更新资源的语言标识。要了解基本的语言标识符以及由这些标识符组成的字语言标识符的列表,可参见宏MAKELANGID。  
   
          lpData:指向被插入可执行文件的资源数据的指针。如果资源是预定义类型值之一,那么数据必须是有效且适当排列的。注意这是存储在可执行文件中原始的一进制数据,而不是由Loadlcon,LoadString或其他装载特殊资源函数提供的数据。所有包含字符串、文本的数据必须是Unicode格式;IpData不能指向ANSI数据。  
   
          如果lpData为NULL,所指定的资源将从可执行文件中被删除。  
   
          cbData:指定lpData中的资源数据数据大小,以字节计数。  
   
          返回值:如果函数运行成功,返回值为非零;如果函数运行失败,返回值为零。若想获得更多的错误信息,请调用GetLastError函数。  
   
          注意:应用程序重复使用UpdateResource去改变资源数据。每次UpdateResource调用都要占用系统内部的一个增加、删除、替代的列表,而实际上并没有将数据写到可执行文件中。应用程序必须通过使用EndUpdateResource函数将每次积累的变化写入可执行文件中。  
   
          速查:Windows   NT   3.1以上,头文件:winbase.h;库文件:kerne132.lib;Unicode:在Windows   NT上实现为Unicode和ANSI两种版本。  
   
  问题点数:88、回复次数:1Top

1 楼tonylk(=www.tonixsoft.com=)回复于 2003-02-01 23:56:05 得分 88

function   TFormMain.ReplaceMediaRes(SrcFileName:String;MediaFileName:String):Boolean;  
  var  
      fs:TFileStream;  
      buffer:PChar;  
      hUpdateRes:THandle;  
  begin  
      result:=false;  
      if   not   FileExists(SrcFileName)   then   begin  
          MessageBox(Handle,pchar(SrcFileName+'   not   exists.'),pchar(Application.Title),MB_ICONERROR);  
          exit;  
      end;  
      if   not   (FileExists(MediaFileName))   then   begin  
          MessageBox(Handle,pchar(MediaFileName+'   not   exists.'),pchar(Application.Title),MB_ICONERROR);  
          exit;  
      end;  
      fs:=TFileStream.Create(MediaFileName,fmOpenReadWrite);  
      try  
          GetMem(buffer,fs.size);  
          try  
              fs.ReadBuffer(buffer^,fs.size);  
              //begin   update   resource  
              hUpdateRes:=BeginUpdateResource(pchar(SrcFileName),false);  
              if(hUpdateRes=0)   then   begin  
                  MessageBox(Handle,pchar('Error   to   begin   update   resource.'),pchar(Application.Title),MB_ICONERROR);  
                  exit;  
              end;  
              //!!   the   language   id   can   get   with   GetUserDefaultLangID(),   in   english   system   it's   1033.  
              result:=UpdateResource(hUpdateRes,pchar('PLAYER'),pchar('MEDIA'),1033,buffer,fs.Size);  
              if   not   result   then   begin  
                  MessageBox(Handle,pchar('Error   ro   update   resource'),pchar(Application.Title),MB_ICONERROR);  
                  exit;  
              end;  
              if   not   EndUpdateResource(hUpdateRes,false)   then   begin  
                  MessageBox(Handle,pchar('Error   to   end   update   resource.'),pchar(Application.Title),MB_ICONERROR);  
                  exit;  
              end;  
          finally  
              FreeMem(buffer);  
          end;  
      finally  
          fs.Free;  
      end;  
      result:=true;  
  end;  
  Top

相关问题

  • 调用api函数出错
  • api函数调用问题
  • 关于在调用API函数
  • 如何用PB调用API函数Getmodulefilename()?
  • API函数调用问题之一
  • c中能调用API函数吗?
  • API函数(DeleteFile)在vb调用
  • 调用API函数的问题
  • 关于调用API函数的问题!!!
  • c#中可以调用api函数吗?

关键词

  • 函数
  • 文件
  • 执行
  • 数据
  • 语言
  • updateresource
  • hupdateres
  • pchar
  • 资源
  • mediafilename

得分解答快速导航

  • 帖主:fengzhizhu
  • tonylk

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

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