Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

Re: StringFileInfo/VarFileInfo für Dateiversion schreiben

  Alt 26. Mai 2009, 06:10
Zitat von Mazel:
Das heißt in dem Fall für jeden Block den ich hizufüge oder von vorn herein soviel reservieren, wie cih für alles benötige, was zur Folge habe muss, dass ich vorher die Größe brauch.
Genau das ist das Problem, was die Sache so knifflig macht.
Eine Möglichkeit wäre, mit den innersten String Structure zu beginnen und diese dann zu einer StringTable Structure zusammenzubauen, die dann wiederum zur StringFileInfo Structure aufgebaut wird.

Hier völlig ungetestet als Anregung:
Delphi-Quellcode:
function BuildStringStructure(Key, Value : Widestring):Ansistring;
var
  p : PInteger;
begin
   key := key + #0; // Terminierung mit 0x0000
   if odd(length(key)) then
      key := key + #0; // auf 32-bit boundary bringen

   SetLength(result, 2 + 2 + 2+ 2*Length(key) + 2 * Length(Value))
   p := PInteger(PChar(result));
   p^ := length(Result); // WORD wLength befüllen
   Inc(p);
   p^ := length(Value) * 2; // WORD wValueLength befüllen
   Inc(p);
   p^ := 1; // WORD wType
   Inc(p);
   // jetzt muss noch Key und Value in den Resultstring kopiert werden (mit Move())
   // ich spar mir das mal
end;
Damit kann man jetzt mehrere String Structures zusammen verketten:
data := BuildStringStructure('Comments', 'ein Test') + BuildStringStructure('CompanyName', 'DP') + .... Jetzt muss das zu einer StringTable Structure aufgebaut werden:
function BuildStringTableStructure(Key:WideString; const Children:Ansistring):AnsiString; Wenn man soweit ist, ist der Aufbau der StringFileInfo Structure relativ einfach:
Delphi-Quellcode:
function BuildStringFileInfoStructure(Key:WideString; const Children:Ansistring):AnsiString;
begin
   Result := BuildStringTableStructure('StringFileInfo', Children);
end;
  Mit Zitat antworten Zitat