procedure UpdateExeResource(Const Source,Dest:string);
var
Stream : TFileStream;
hDestRes : THANDLE;
lpData : Pointer;
cbData : DWORD;
begin
Stream := TFileStream.Create(Source,fmOpenRead or fmShareDenyNone);
try
Stream.Seek(0, soFromBeginning);
cbData:=Stream.Size;
if cbData>0 then
begin
GetMem(lpData,cbData);
try
Stream.Read(lpData^, cbData);
hDestRes:= BeginUpdateResource(PChar(Dest), False);
if hDestRes <> 0 then
if UpdateResource(hDestRes, RT_RCDATA,'DATA',0,lpData,cbData) then
begin
if not EndUpdateResource(hDestRes,FALSE) then RaiseLastOSError
end
else
RaiseLastOSError
else
RaiseLastOSError;
finally
FreeMem(lpData);
end;
end;
finally
Stream.Free;
end;
end;
리소스를 추가하는 소스코드인데요.
UpdateExeResource('C:\Data.txt','C:\project.exe');
이런 식으로 사용합니다.
그런데 위와 같이 리소스를 한개만 추가하면 문제가 없는데
UpdateExeResource('C:\Data1.txt','C:\project.exe');
UpdateExeResource('C:\Data2.txt','C:\project.exe');
UpdateExeResource('C:\Data3.txt','C:\project.exe');
이렇게 여러개를 추가하려고 하면 에러가 납니다.
정확한 에러메세지는 기억이 나지 않지만 C:\project.exe에 접근 할 수 없다는 메세지인 것으로 기억합니다.
고수님들 도움 부탁드립니다.
|