VersionInfo-Ressourcen mehrsprachig

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
aXied
Beiträge: 20
Registriert: Mo 30. Sep 2013, 20:57

VersionInfo-Ressourcen mehrsprachig

Beitrag von aXied »

Ich erkläre einleiten die Problematik, die Fragen stehen dann am Ende.

Ich möchte in meine Binaries (Plattformunabhängig) mehrsprachige Versionsinformationen einbinden und lesend nutzen.
Hierzu erzeuge ich eine Ressourcen-Datei (VI.rc) und binde diese mittels {$R VI.rc} ein.
Soweit auch kein Problem, solange nur eine Sprache enthalten ist.

[text] 
1 VERSIONINFO
FILEVERSION 1,2,3,4
PRODUCTVERSION 5,6,7,8
//FILEOS VOS_UNKNOWN
//FILETYPE VFT_UNKNOWN
//FILESUBTYPE VFT2_UNKNOWN
FILEFLAGSMASK 0x00000000
FILEFLAGS 0x00000000
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040C04E4"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "\0"
VALUE "FileDescription", "Französisch(Frankreich)\0"
VALUE "FileVersion", "\0"
VALUE "InternalName", "\0"
VALUE "LegalCopyright", "© Copyright 2009 - 2014, Tous droits réservés.\0"
VALUE "LegalTrademarks", "© Copyright 2009 - 2014, TM\0"
VALUE "OriginalFilename", "\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "\0"
VALUE "ProductVersion", "\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x040C, 0x04E4
END
END
 [/text]

Sobald nun weitere Sprachen in die Ressource-Datei eingefügt werden, steigt sowohl der Lazarus- als auch der FPCcompiler aus.

Lazarus:
[text] 
Compiling resource C:\Users\Admin\Desktop\Ressource\source\..\VI-4.rc
project1.lpr(23,1) Error: Error while compiling resources. Compile with -vd for more details. Check for duplicates.
 [/text]

windres:
[text] 
windres: C:\\Users\\Admin\\Desktop\\Ressource\\VI-4.rc:28: syntax error
cpp: stdout: Invalid argument
windres: preprocessing failed.
 [/text]

Diesem Problem bin ich dann mit dem brcc32 aus dem Weg gegangen und binde jetzt die entsprechende Ressource-Datei (VI.res) ein.


Ich habe mir zum lesen der VersionInfo eine Klasse TmyVersionInfo gebaut, welche auf Basis der Units "versionresource, versiontypes, resource" die
einzelnen Teile "FixedInfo, StringFileInfo, VarFileInfo" zur Verfügung stellt.

Bis hier her funktioniert alles wie gewünscht, wenn eine Ressource-Datei(VI-1.res) mit nur einer Sprache eingebunden ist.
Innerhalb meines Programms kann ich die Versioninfo lesen und auch in Windows\Dateieigenschaften die Ressource einsehen.
Binde ich nun die Ressource-Datei(VI-4.res, "vier Sprachen") ein, kann ich in den jeweiligen OS-SprachVersionen die zugehörige Ressource einsehen.
Innerhalb meines Programmes kommt es aber zu einem Klasse: EReadError, Stream read error.
Der Fehler passiert aber erst beim ausfüren der Methode (FVersResource.FixedInfo).

Nun zu meinen Fragen:
  1. Handelt es sich bei den Ressource-Compilern um einen Bug oder einen Fehler meinerseits?
  2. Mir ist leider das Konzept der Plattformunabhängigen Ressourcen nicht bekannt.
    Deswegen, können überhaupt mehrsprachige VersionInfos Plattformunabhängig verwendet werden?
  3. Ich würde gerne in die Methode "FVersResource.FixedInfo" mit F7 reinsteppen, dies geht nicht!
    Warum?
Um das Ganze evtl. verständlicher zu machen, hänge ich noch das entsprechende Project(Klein und auf das Problem beschränkt) an.
In project1.lpr kann zwischen den einzelnen Ressourcen umgeschallten werden.
Dateianhänge
Ressource.zip
Projectverzeichnis
(524.28 KiB) 78-mal heruntergeladen

aXied
Beiträge: 20
Registriert: Mo 30. Sep 2013, 20:57

Re: VersionInfo-Ressourcen mehrsprachig

Beitrag von aXied »

  1. Nun zu meinen Fragen:
  2. Handelt es sich bei den Ressource-Compilern um einen Bug oder einen Fehler meinerseits?
  3. Mir ist leider das Konzept der Plattformunabhängigen Ressourcen nicht bekannt.
    Deswegen, können überhaupt mehrsprachige VersionInfos Plattformunabhängig verwendet werden?
  4. Ich würde gerne in die Methode "FVersResource.FixedInfo" mit F7 reinsteppen, dies geht nicht!
    Warum?
Es wäre schon sehr hilfreich für mich, wenn mir jemand zu meiner dritten Frage einen Hinweis geben könnte. :roll:

Benutzeravatar
theo
Beiträge: 10900
Registriert: Mo 11. Sep 2006, 19:01

Re: VersionInfo-Ressourcen mehrsprachig

Beitrag von theo »

aXied hat geschrieben:Es wäre schon sehr hilfreich für mich, wenn mir jemand zu meiner dritten Frage einen Hinweis geben könnte.
Die FCL und RTL ist normalerweise nicht mit Debug Info kompiliert.
http://www.lazarusforum.de/viewtopic.php?f=5&t=3919

Ansonsten mal ins Wiki schauen
http://wiki.freepascal.org/Translations ... rograms/de
http://wiki.freepascal.org/Lazarus_Resources/de

aXied
Beiträge: 20
Registriert: Mo 30. Sep 2013, 20:57

Re: VersionInfo-Ressourcen mehrsprachig

Beitrag von aXied »

Die beiden wiki's kenne ich schon, danke.
Ich werde versuchen mit Deinem Hinweis zum Debugging der Lösung näher zu kommen.

aXied
Beiträge: 20
Registriert: Mo 30. Sep 2013, 20:57

Re: VersionInfo-Ressourcen mehrsprachig

Beitrag von aXied »

Ich konnte nun mit Hilfe der Debugmöglichkeit das Problem finden und lösen.
Beim Parsen des VersionInfo Streams wurde der Header "Translation" pro angegebener Sprache gelesen.
Dies führte dazu, das über das Streamende hinaus versucht wurde zu lesen.

Ich werde dies als Bug melden.

Antworten