Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FreePascal eingebunde Resourcen abfragen (RCDATA) (https://www.delphipraxis.net/167161-eingebunde-resourcen-abfragen-rcdata.html)

thomasschaf 15. Mär 2012 18:53

Delphi-Version: 5

eingebunde Resourcen abfragen (RCDATA)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

wie kann ich eingebunde Resourcen auslesen ?
Der Typ ist RC_DATA.

Ich kann sie übrigens mit dem "Resource Hacker" auslesen.


Thomas

Luckie 15. Mär 2012 19:04

AW: eingebunde Resourcen abfragen (RCDATA)
 
Stichwort: TResourceSteam.

thomasschaf 15. Mär 2012 23:00

AW: eingebunde Resourcen abfragen (RCDATA)
 
Zitat:

Zitat von Luckie (Beitrag 1156779)
Stichwort: TResourceSteam.

Delphi-Quellcode:
TResourceStream.Create(HINSTANCE, '99303', RT_RCDATA);
gibt leider die Fehlermeldung:

der angegebene ressourcentyp wurde nicht in der image-datei gefunden

Ist die Syntax denn dem Screenshot zufolge richtig ??

Namenloser 15. Mär 2012 23:08

AW: eingebunde Resourcen abfragen (RCDATA)
 
Nein, es muss heißen
Delphi-Quellcode:
TResourceStream.CreateFromID(HINSTANCE, 99303, RT_RCDATA)
, da du hier eine Ressource nach einer ID (=Nummer) und nicht nach einem Namen (=String) lädst. Ich persönlich bin ja eher ein Freund von benannten Ressourcen, aber wie du deine Ressourcen verwaltest, ist natürlich dir überlassen.

thomasschaf 15. Mär 2012 23:33

AW: eingebunde Resourcen abfragen (RCDATA)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Leider funktioniert das auch nicht und gibt den selben Fehler aus.

Wie kommst du denn darauf, dass ich nach einer Nummer suche ?
Dort, wo im Screenshot 99303 steht, könnte auch ein String stehen.

Im Anhang habe ich noch ein Beispiel erstellt.

Ist es denn sicher, dass man die Resourcen auslesen kann, wenn sie im "Resource Hacker" angezeigt werdne oder gibt es da noch Spezialfälle, die es zu unterscheiden gibt ?

Namenloser 15. Mär 2012 23:42

AW: eingebunde Resourcen abfragen (RCDATA)
 
Zitat:

Zitat von thomasschaf (Beitrag 1156814)
Dort, wo im Screenshot 99303 steht, könnte auch ein String stehen.

Im Anhang habe ich noch ein Beispiel erstellt.

Ah ok, dann hab ich das falsch gesehen, sorry. Dann sollte dein Beispiel aber eigentlich funktionieren.

Ist wirklich sicher, dass die Ressource auch in der Exe ist und du nicht mit Reshacker versehentlich die falsche Datei untersucht hast?

himitsu 15. Mär 2012 23:48

AW: eingebunde Resourcen abfragen (RCDATA)
 
Wie hast du diese Resource erstellt?

thomasschaf 15. Mär 2012 23:48

AW: eingebunde Resourcen abfragen (RCDATA)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es ist sicher, dass ich die richtige Datei mit dem Resourcehacker geöffnet habe.

Zwei mögliche Probleme sehe ich:
- Ich arbeite mit Lazarus, nicht mit Delphi.
- Die Resource, die ich auslesen möchte, habe ich auch in die exe-Datei geschrieben (mit einem anderen Programm über UpdateResource).
-> Es könnte also sein, dass die Resource nicht "ordentlich" reingeschrieben worden ist, obwohl ich sie mit dem reshacker sehen kann (daher auch die Frage, ob es da noch Unterschiede/Spezialfälle gibt)
--> Wenn ich die Resource in die exe-Datei schreibe und diese starte, sieht das Design auch anders aus (siehe screenshot), es wurden also die Resourcen, die für das Design verantwortlich sind, entfernt?

lbccaleb 16. Mär 2012 02:10

AW: eingebunde Resourcen abfragen (RCDATA)
 
Es kann sein, dass das Design des Programms aus der Ressource geladen wird und du mit deiner veränderung selbiger, diese irgendwie zerstörst. Er somit die benötigten Daten nicht mehr bekommt.

Ich kann dir nur dazu raten, dich vorher mit Tutorials zu dem Thema Ressourcen zu befassen. Google ist da dein Freund ;)

thomasschaf 16. Mär 2012 14:40

AW: eingebunde Resourcen abfragen (RCDATA)
 
Ich habe mich in der Zwischenzeit mit dem Thema Resourcen sehr ausgiebig beschäftigt, trotzdem kann ich mir nicht erklären, warum die Resource nicht gefunden werden kann, aber mit einem anderen Programm (Resource Hacker) angezeigt werden kann.

Könnte jemand vielleicht mit Delphi folgenden Code compilen und die exe hier im Forum anhängen ?
Delphi-Quellcode:
function TForm1.GetResValue(resname: string): string;
var
  RS: TResourceStream;
begin
  try
    RS := TResourceStream.Create(hinstance, resname, RT_RCDATA);
    ShowMessage('(1)');
    RS.Free;
    ShowMessage('(2)');
    SetString(Result, RS.Memory, RS.Size);
  except
    ShowMessage(SysErrorMessage(GetLastError));
    Result := '';
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s := GetResValue(Edit1.Text);
  if (s <> '') then
    ShowMessage(s);
end;
mit folgenden Komponenten:
- Editfeld: "Edit1"
- Button: "Button1"

Dann könnte ich testen, ob es möglich ist, die Resource abzufragen, die ich in eine exe reinschreibe.

Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 Uhr.
Seite 1 von 2  1 2      

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