如何替换EXE资源文件中的位图?
麻烦看一下我这段哪里错了,位图导入后重新导出就不能用了
function TFrmMain.ReplaceMediaRes(SrcFileName:String;MediaFileName:String):Boolean;
var
bitmap:TBitmap;
MM:TMemorystream;
buffer:PChar;
hUpdateRes:THandle;
begin
result:=false;
if not FileExists(SrcFileName) then begin
MessageBox(Handle,pchar('打开文件:'+SrcFileName+'出错'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
if not (FileExists(MediaFileName)) then begin
MessageBox(Handle,pchar('打开文件:'+MediaFileName+'出错'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
MM:=TMemorystream.Create;
bitmap:=TBitmap.Create;
bitmap.LoadFromFile(MediaFileName);
bitmap.SaveToStream(MM);
MM.Position:=2; //MM.Position:=0也试过,不行,有人说要去掉头文件,我就从第2开始读了
try
GetMem(buffer,MM.Size-2);
try
mm.ReadBuffer(buffer^,MM.Size-2);
//开始更新资源
hUpdateRes:=BeginUpdateResource(pchar(SrcFileName),false);
if(hUpdateRes=0) then begin
MessageBox(Handle,pchar('开始修改资源出现异常.'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
result:=UpdateResource(hUpdateRes,RT_BITMAP,MAKEINTRESOURCE(1),MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),buffer,MM.Size-2);
if not result then begin
MessageBox(Handle,pchar('修改资源出现异常。'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
if not EndUpdateResource(hUpdateRes,false) then begin
MessageBox(Handle,pchar('修改资源结束出现异常.'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
finally
FreeMem(buffer);
end;
finally
mm.Free;
end;
result:=true;
end;