AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringlist in Resource speichern schlägt fehl

Ein Thema von BetaBot · begonnen am 16. Jan 2010 · letzter Beitrag vom 16. Jan 2010
Antwort Antwort
BetaBot

Registriert seit: 6. Mai 2007
35 Beiträge
 
Turbo Delphi für Win32
 
#1

Stringlist in Resource speichern schlägt fehl

  Alt 16. Jan 2010, 12:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Stringlist in Resource speichern schlägt fehl

  Alt 16. Jan 2010, 13:59
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 (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.
$2B or not $2B
  Mit Zitat antworten Zitat
BetaBot

Registriert seit: 6. Mai 2007
35 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Stringlist in Resource speichern schlägt fehl

  Alt 16. Jan 2010, 14:26
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?
  Mit Zitat antworten Zitat
16. Jan 2010, 14:28
Dieses Thema wurde von "SirThornberry" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Object-Pascal / Delphi-Language" verschoben.
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Stringlist in Resource speichern schlägt fehl

  Alt 16. Jan 2010, 14:54
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 von BetaBot:
Allerdings funktioniert es nicht. Die Resource wird nicht 'upgedated' ...
Wird UpdateResource überhaupt ausgeführt und wenn ja, was sagt GetLastError?


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 ...weiter ins Forum...,
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")
$2B or not $2B
  Mit Zitat antworten Zitat
BetaBot

Registriert seit: 6. Mai 2007
35 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Stringlist in Resource speichern schlägt fehl

  Alt 16. Jan 2010, 19:30
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz