![]() |
UpdateResource (XML)
Ich habe eine Exe, die ich durch eine andere Exe konfigurieren möchte. Als Konfigurationsformat verwende ich XML, welches ich dann in die zu konfigurierende Exe packe. Soweit, so gut, funktioniert auch vordergründig. Nun habe ich evtl. auch noch Binärgedöns (z.B. Grafiken). Also dachte ich mir, das kann ja mit in die XML, einfach Base64-kodieren und feddich is der Lack. Das klappt aber überhaupt nicht, nach EndUpdateResource ist die Exe inne Futt, wie der Sauerländer sagt. Da ich die XML auch noch zwecks späterer Verwendung auf der Festplatte ablege, hab ich mir flugs den ResourceHacker geschnappt und sie dann damit eingefügt, das funktioniert. Hier mein Code:
Delphi-Quellcode:
Hat jemand eine Idee, was ich falsch mache? Hülfee!!!einseinself
Stream := TMemoryStream.Create;
try XML.SaveToStream(Stream); ResHandle := BeginUpdateResource(PChar(Filename), false); if ResHandle <> 0 then try Success := UpdateResource(ResHandle, RT_RCDATA, 'config', MakeLangID(LANG_NEUTRAL, SUBLANG_DEFAULT), Stream.Memory, Stream.Size); finally EndUpdateResource(ResHandle, not Success); end; finally Stream.Free; end; |
AW: UpdateResource (XML)
Kämpfe immer wieder mit Stream, meist hilft sowas:
Delphi-Quellcode:
Nach dem SaveToStream ist dessen Position (vermutlich) immer am Ende des Streams und von der Position aus wird dann weiter gearbeitet. Das dürfte dann hier bei UpdateResource ziemlich in die Hose gehen.
XML.SaveToStream(Stream);
Stream.Position := 0; Ist jetzt mal so vermutet ;-) |
AW: UpdateResource (XML)
Das hatte ich auch schon versucht, leider war es das nicht. Trotzdem Danke.
|
AW: UpdateResource (XML)
Mir sind noch zwei Dinge zu
![]() Die Doku zu den letzten beiden Parametern sagt: Zitat:
2) Die Größe des Streams nimmt ein DWORD auf, TStream.Size ist aber ein Int64. Also aufpassen dass du nicht mehr alsa 4GB reinstecken willst ;-) Ich sehe nur dass es mit kleinen Dateien funktioniert, will ich eine 5-10 MB große Textdatei reinstecken, ist die exe kaputt. Hier brabbelt jemand etwas von einem angeblich sehr kleinen Limit, aber das kann doch nicht sein? ![]() |
AW: UpdateResource (XML)
Danke, den Thread hatte ich auch schon gelesen, außerdem sagt da ja auch jemand, dass er es mit 5000 Zeichen ohne Probleme hinbekommen hat. Nach meiner Kenntnis gibt es kein festes Limit für RT_RCDATA und wie gesagt, mit dem ResourceHacker geht es ja. Ich muss irgendwo einen blöden Fehler machen.
|
AW: UpdateResource (XML)
Update: in einem Foreneintrag von 2003 hat Mathias Rauen (madExcept) geschrieben, dass UpdateResource gern einmal die Delphi-Kompilate mit Debug-Infos zerhaut. Also habe ich beide Exen einmal in der Release-Konfiguration erstellt. Damit scheint es zu funktionieren :-D
There must man first once upon come. |
AW: UpdateResource (XML)
Ich habe es natürlich auch mit einer Delphi-Exe mit Debug-Infos versucht, das erklärt das wohl :roteyes:
|
AW: UpdateResource (XML)
Dachte ich mir, kann ja auch keiner ahnen. Danke fürs Nachvollziehen :cheers:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz