Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Stringlist in Resource speichern schlägt fehl (https://www.delphipraxis.net/146239-stringlist-resource-speichern-schlaegt-fehl.html)

BetaBot 16. Jan 2010 11:49


Stringlist in Resource speichern schlägt fehl
 
Hallo zusammen,

ich habe eine Textdatei, die ich als RCDATA in eine res - Datei unter dem Namen 'orgstring' einbinde.

Diese lade ich dann zur Laufzeit in eine Stringlist mit folgendem Code

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
Var
  mystream : TresourceStream;
begin
  myStream := Tresourcestream.Create(HInstance, 'orgstring', RT_RCDATA);
  sl.LoadFromStream(mystream);
  mystream.free;
end;
was sehr gut funktioniert.

Zur Laufzeit ändern sich jetzt die Daten in der Stringlist und so möchte ich die Resource aktualisieren.

Folgender Code scheitert

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
Var
  mystream : TresourceStream;
begin
  myStream := Tresourcestream.Create(HInstance, 'orgstring', RT_RCDATA);
  sl.SavetoStream(mystream);
  mystream.Free;
end;
weil man wohl aus resource - Streams nur lesen kann.

Aber wie kann ich das Problem jetzt lösen?

Mit der Suche nach folgenden Begriffen: BeginUpdateResource, UpdateResource & EndUpdateResource habe ich zwar einige Code - Beispiele gefunden, aber mit keinem konnte ich mein Problem wirklich lösen.

Ich hoffe, jemand kann mir weiterhelfen.

Danke, und bis dann

der BetaBot.

himitsu 16. Jan 2010 12:59

Re: Stringlist in Resource speichern schlägt fehl
 
1. falsche Sparte
im es mal "nett" auszudrücken: Es wäre schön, wenn du bitte endlich mal deine Beiträge in der RICHTIGEN Sparte eröffnest :warn: (nahezu alle deine Beiträge befinden/befanden sich Anfangs immer in "Neuen Beitrag zur Code-Library hinzufügen", welches nunmal komplett falsch ist)

2. in den "eigenen" Resourcen kann man nicht speichern
Das würde bedeuten die Datei wöllte sich selber verändern wollen,
aber da sie ja läuft und demnach bereits geöffnet ist und das OHNE Sharing-Rechte für's Schreiben.

Schau dich mal nach MSDN-Library durchsuchenUpdateResource in der DP um > Hier im Forum suchenUpdateResource
Dieses ist für sowas gedacht, läßt sich aber nicht auf laufende Anwendungen anwenden.

BetaBot 16. Jan 2010 13:26

Re: Stringlist in Resource speichern schlägt fehl
 
1. Entschuldigung für die falsche Sparte, aber als ich meinen ersten Beitrag ins Forum stellte, habe ich erst lange gesucht, um das tun zu können und das war dann nunmal hier. Weil ich aber nicht ermahnt wurde, behielt ich das so bei. Ich werde mich für folgende Beiträge aber besser informieren. Mein Fehler, sorry.

2. ich habe UpdateResource mit folgendem Code

Delphi-Quellcode:
var
  Pfad: AnsiString;
  hInst: cardinal;
begin
   Pfad:= 'C:\Test.exe';
   if FileExists(Pfad) then
   begin
     hInst := BeginUpdateResource(Pchar(Pfad), false);
     if hInst > 0 then
       try
         UpdateResource(hInst, RT_RCDATA, 'MYTEXT', LANG_NEUTRAL, @memo1.Text[1], length(memo1.Text));
       finally
         EndUpdateResource(hInst, false);
       end;
   end;
hier entnommen: Beispiel von bitsetter

Also, greife ich hier auf ein anderes Programm zu,
'MYTEXT' ist bei mir 'orgstring' und 'Memo1.Text' = 'mywidestring' in dem ich die TNTStringlist gespeichert habe.

Allerdings funktioniert es nicht. Die Resource wird nicht 'upgedated' und an anderer Stelle habe ich gelesen, dass das vielleicht am Pointer (@mywidestring[1]) u/o an der Größe (length(mywidestring)) liegen kann.

Weiß hier jemand Antwort, oder hat einen Vorschlag, wie ich die Stringlist in eine fremde Resource schreiben kann?

DP-Maintenance 16. Jan 2010 13:28

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Object-Pascal / Delphi-Language" verschoben.

himitsu 16. Jan 2010 13:54

Re: Stringlist in Resource speichern schlägt fehl
 
UpdateResource und auch BeginUpdateResource liefern per MSDN-Library durchsuchenGetLastError einen Fehlercode (so wie fast jeder Andere der WinAPIs auch)
und diesen Fehlercode sollte man grundsätzlich erstmal auswerten.


Zitat:

Zitat von BetaBot
Allerdings funktioniert es nicht. Die Resource wird nicht 'upgedated' ...

Wird UpdateResource überhaupt ausgeführt und wenn ja, was sagt GetLastError?


Zitat:

Zitat von BetaBot
Weil ich aber nicht ermahnt wurde, behielt ich das so bei. Ich werde mich für folgende Beiträge aber besser informieren.

nunja, die kleinen Beiträge/Informationen ala
Zitat:

Beitrag wurde verschoben
Dieses Thema wurde von "SirThornberry" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Object-Pascal / Delphi-Language" verschoben.
hätten dich schon stutzig machen können.
Und meißt steht dort auch nochmal ein Grund drinnen.

Sowas wird manuell von einem Moderator erledigt und es würde massig Arbeit ersparen, wenn viele gleich das richtige Unterforum verwenden würden.

Einfach auf der Startseite diesem Link folgen http://www.delphipraxis.net/images/portal_arrow.gif...weiter ins Forum...http://www.delphipraxis.net/images/portal_arrow_up.gif,
da dann in ein passendes Forum und dort den neuen Beitrag über [Neues Thema] erstellen :)

Hattest du diese Forenübersicht nicht gefunden, oder woran lag es, daß du keinen passenden Ort fandest?
Wir versuchen das Forum ja zu verbessern, nur müssen wir wissen wo es hängt. (du bist ja nicht der Einzige mit diesem "Problem")

BetaBot 16. Jan 2010 18:30

Re: Stringlist in Resource speichern schlägt fehl
 
Auch wenn es diesmal keine konkrete Lösung für mein Problem gibt, so hat sich doch herausgestellt, dass sie in ResourceUpdate unter Auswertung von GetLastError zu finden ist. Also bin ich ein Stück weiter. Danke dafür.

Zur Problematik des sich "ständig" verlaufenden Users hoffe ich hier verirrte User als "fortgeschrittener" Anfänger einen konstruktiven Beitrag leisten zu können.

Alles Gute,

der BetaBot.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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