Difference between revisions of "fcl-res"
From Lazarus wiki
Jump to navigationJump to search (→See also: Added related entries) |
|||
(7 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
== Overview == | == Overview == | ||
− | ''fcl-res'' is a Free Component Library component that provides functionality to create | + | |
+ | ''fcl-res'' is a Free Component Library component that provides functionality to create and access all kinds of resources, including those on: | ||
+ | |||
* Windows PE | * Windows PE | ||
* (Linux) ELF | * (Linux) ELF | ||
− | * | + | * macOS Mach-O |
+ | * .res files | ||
== Documentation == | == Documentation == | ||
− | See the XML directory under fcl-res for fpdoc documentation. | + | |
+ | See the XML directory under fcl-res for fpdoc documentation, which includes a nice introduction and tutorial, complete with code examples. | ||
+ | |||
+ | You can generate e.g. a CHM file from this using this command in Windows (please adjust file locations): | ||
+ | |||
+ | <syntaxhighlight lang="dos"> | ||
+ | C:\Development\fpctrunk\bin\i386-win32\fpdoc.exe ^ | ||
+ | --package=fcl-res ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\acceleratorsresource.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\bitmapresource.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\coffconsts.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\coffreader.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\cofftypes.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\coffwriter.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\dfmreader.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\elfconsts.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\elfreader.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\elftypes.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\elfwriter.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\externalreader.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\externaltypes.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\externalwriter.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\fpcrestypes.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\groupcursorresource.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\groupiconresource.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\groupresource.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\icocurtypes.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\machoconsts.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\machoreader.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\machotypes.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\machowriter.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\resdatastream.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\resfactory.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\resmerger.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\resource.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\resourcetree.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\resreader.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\reswriter.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\stringtableresource.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\strtable.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\tlbreader.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\versionconsts.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\versionresource.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\versiontypes.pp ^ | ||
+ | --input=C:\Development\fpctrunk\packages\fcl-res\src\winpeimagereader.pp ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\acceleratorsresource.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\bitmapresource.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\coffreader.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\cofftypes.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\coffwriter.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\dfmreader.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\elfconsts.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\elfreader.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\elfwriter.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\externalreader.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\externaltypes.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\externalwriter.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\groupcursorresource.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\groupiconresource.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\groupresource.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\machoreader.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\machotypes.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\machowriter.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\resdatastream.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\resfactory.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\resource.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\resourcetree.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\resreader.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\reswriter.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\stringtableresource.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\versionconsts.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\versionresource.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\versiontypes.xml ^ | ||
+ | --descr=C:\Development\fpctrunk\packages\fcl-res\xml\winpeimagereader.xml ^ | ||
+ | --format=chm ^ | ||
+ | --auto-index ^ | ||
+ | --auto-toc ^ | ||
+ | --make-searchable ^ | ||
+ | --output=fcl-res.chm | ||
+ | </syntaxhighlight> | ||
== Examples == | == Examples == | ||
+ | |||
The resource unit is used in fpcres, a resource management tool, in $(fpcdir)\utils\fpcres\sourcehandler.pas | The resource unit is used in fpcres, a resource management tool, in $(fpcdir)\utils\fpcres\sourcehandler.pas | ||
− | [[Package List]] | + | See also the examples in the help file, e.g. |
+ | |||
+ | <syntaxhighlight lang="pascal"> | ||
+ | program converttosparc; | ||
+ | // slightly modified from fcl-res help file program res3 (mainly comments). | ||
+ | // This program reads a supported resource file (and autodetects the resource type) | ||
+ | // then writes to a specific format - in this case SPARC ELF. | ||
+ | {$mode objfpc} | ||
+ | |||
+ | uses | ||
+ | Classes, SysUtils, resource, | ||
+ | // You need to specify which resources you want to be able to read. | ||
+ | // The units initialize themselves and register themselves as readers.... | ||
+ | resreader, coffreader, elfreader, winpeimagereader, | ||
+ | //... same goes for writers | ||
+ | elfwriter, | ||
+ | // elfwriter needs its constants unti: | ||
+ | elfconsts; | ||
+ | |||
+ | var | ||
+ | resources : TResources; | ||
+ | writer : TElfResourceWriter; | ||
+ | reader : TAbstractResourceReader; | ||
+ | inFile : TFileStream; | ||
+ | |||
+ | begin | ||
+ | resources:=TResources.Create; | ||
+ | inFile:=TFileStream.Create(paramstr(1), fmOpenRead or fmShareDenyNone); | ||
+ | // Use FindReader to let TResources find the appropriate reader for the file | ||
+ | reader:=TResources.FindReader(inFile); | ||
+ | writeln('Selected reader: ',reader.Description); | ||
+ | resources.LoadFromStream(inFile,reader); | ||
+ | writer:=TElfResourceWriter.Create; | ||
+ | writer.MachineType:=emtsparc; | ||
+ | resources.WriteToFile(ChangeFileExt(paramstr(1),'.o'),writer); | ||
+ | |||
+ | // clean up - adding try..except blocks would be nice: | ||
+ | resources.Free; | ||
+ | reader.Free; | ||
+ | writer.Free; | ||
+ | inFile.Free; | ||
+ | end. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Getting file version information == | ||
+ | |||
+ | See: [[Show_Application_Title,_Version,_and_Company|Show Application Title, Version, and Company]] | ||
+ | |||
+ | == See also == | ||
+ | |||
+ | * [[Lazarus_Resources|Description of using FPC and Lazarus resources]] | ||
+ | * [[lazres|Lazarus Resource compiler]] | ||
+ | * [[IDE_Window:_Project_Options#Resources|IDE Project Options > Resources]] | ||
+ | * [[Package List]] | ||
[[Category:FPC]] | [[Category:FPC]] | ||
+ | [[Category:FCL]] | ||
[[Category:Packages]] | [[Category:Packages]] | ||
− |
Latest revision as of 02:58, 13 August 2020
Overview
fcl-res is a Free Component Library component that provides functionality to create and access all kinds of resources, including those on:
- Windows PE
- (Linux) ELF
- macOS Mach-O
- .res files
Documentation
See the XML directory under fcl-res for fpdoc documentation, which includes a nice introduction and tutorial, complete with code examples.
You can generate e.g. a CHM file from this using this command in Windows (please adjust file locations):
C:\Development\fpctrunk\bin\i386-win32\fpdoc.exe ^
--package=fcl-res ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\acceleratorsresource.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\bitmapresource.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\coffconsts.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\coffreader.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\cofftypes.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\coffwriter.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\dfmreader.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\elfconsts.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\elfreader.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\elftypes.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\elfwriter.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\externalreader.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\externaltypes.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\externalwriter.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\fpcrestypes.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\groupcursorresource.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\groupiconresource.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\groupresource.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\icocurtypes.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\machoconsts.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\machoreader.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\machotypes.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\machowriter.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\resdatastream.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\resfactory.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\resmerger.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\resource.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\resourcetree.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\resreader.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\reswriter.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\stringtableresource.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\strtable.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\tlbreader.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\versionconsts.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\versionresource.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\versiontypes.pp ^
--input=C:\Development\fpctrunk\packages\fcl-res\src\winpeimagereader.pp ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\acceleratorsresource.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\bitmapresource.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\coffreader.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\cofftypes.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\coffwriter.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\dfmreader.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\elfconsts.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\elfreader.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\elfwriter.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\externalreader.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\externaltypes.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\externalwriter.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\groupcursorresource.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\groupiconresource.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\groupresource.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\machoreader.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\machotypes.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\machowriter.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\resdatastream.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\resfactory.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\resource.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\resourcetree.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\resreader.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\reswriter.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\stringtableresource.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\versionconsts.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\versionresource.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\versiontypes.xml ^
--descr=C:\Development\fpctrunk\packages\fcl-res\xml\winpeimagereader.xml ^
--format=chm ^
--auto-index ^
--auto-toc ^
--make-searchable ^
--output=fcl-res.chm
Examples
The resource unit is used in fpcres, a resource management tool, in $(fpcdir)\utils\fpcres\sourcehandler.pas
See also the examples in the help file, e.g.
program converttosparc;
// slightly modified from fcl-res help file program res3 (mainly comments).
// This program reads a supported resource file (and autodetects the resource type)
// then writes to a specific format - in this case SPARC ELF.
{$mode objfpc}
uses
Classes, SysUtils, resource,
// You need to specify which resources you want to be able to read.
// The units initialize themselves and register themselves as readers....
resreader, coffreader, elfreader, winpeimagereader,
//... same goes for writers
elfwriter,
// elfwriter needs its constants unti:
elfconsts;
var
resources : TResources;
writer : TElfResourceWriter;
reader : TAbstractResourceReader;
inFile : TFileStream;
begin
resources:=TResources.Create;
inFile:=TFileStream.Create(paramstr(1), fmOpenRead or fmShareDenyNone);
// Use FindReader to let TResources find the appropriate reader for the file
reader:=TResources.FindReader(inFile);
writeln('Selected reader: ',reader.Description);
resources.LoadFromStream(inFile,reader);
writer:=TElfResourceWriter.Create;
writer.MachineType:=emtsparc;
resources.WriteToFile(ChangeFileExt(paramstr(1),'.o'),writer);
// clean up - adding try..except blocks would be nice:
resources.Free;
reader.Free;
writer.Free;
inFile.Free;
end.
Getting file version information
See: Show Application Title, Version, and Company