如何从磁盘读取.res文件?不附加到.exe,所以可以轻松更新.res文件而不需要再次.exe吗?
类似的东西
function LoadResourceFromDisk(const FileName, ResName: string): TStream;
var
ResourceStream: TResourceStream;
FileStream: TFileStream;
begin
Result := nil;
FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
ResourceStream := TResourceStream.CreateFromStream(FileStream, ResName);
try
Result := ResourceStream;
finally
ResourceStream.Free;
end;
finally
FileStream.Free;
end;
end;
但是 CreateFromStream 函数不存在。
尝试使用以下辅助方法:
function LoadResourceFromDisk(const FileName, ResName: string): TMemoryStream;
var
FileStream: TFileStream;
ResHeader: TResHeader;
ResData: TBytes;
begin
Result := TMemoryStream.Create;
FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
while FileStream.Position < FileStream.Size do
begin
// Read resource header
FileStream.ReadBuffer(ResHeader, SizeOf(ResHeader));
// Check if this is the resource we're looking for
if ResHeader.ResName = ResName then
begin
// Read resource data
SetLength(ResData, ResHeader.DataSize);
FileStream.ReadBuffer(ResData[0], ResHeader.DataSize);
// Write to result stream
Result.WriteBuffer(ResData[0], ResHeader.DataSize);
Break;
end
else
// Skip to next resource
FileStream.Position := FileStream.Position + ResHeader.DataSize;
end;
finally
FileStream.Free;
end;
end;