Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi resource die mit updateresource gespeichert wurde auslesen (https://www.delphipraxis.net/50902-resource-die-mit-updateresource-gespeichert-wurde-auslesen.html)

TheGame1492 2. Aug 2005 15:33


resource die mit updateresource gespeichert wurde auslesen
 
hiho

hab folgendes problem ich benutze folgenden code (hier aus DP) um eine exe-file (image.exe) als resource an eine andere exe (test.exe) zu hängen:

Delphi-Quellcode:

procedure TForm1.LinkIt;
var
   stream : TFilestream;
   hInst: THandle;
   ptr : Pointer;
begin

   Stream := TFileStream.Create('Image.exe',fmOpenRead);
   getmem (ptr,Stream.size+1-14);
   try
      Stream.Seek(soFromBeginning,14);
      stream.read(ptr^,Stream.size);
      hInst:=BeginUpdateResource(Pchar('test.exe'), False);
      if hInst > 0 then
         begin
         UpdateResource(hInst, RT_RCDATA,'Image',
         MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),ptr,Stream.size-14);
         EndUpdateResource(hInst, False);
         end;
   finally
      freemem (ptr,Stream.size+1-14);
      stream.Free;
   end;
end;
die image.exe gibt beim öffnen ein einfaches 'hello world' aus

diese soll an die test.exe gehangen werden

laut ResourceHacker ist diese erfolgreich 'rangehangen' worden


nun wollt ich beim starten der test.exe die image.exe wieder 'rausholen' mit folgendem befehl

Delphi-Quellcode:
var
  Resource: Pointer;
  ....
begin
.
.
.
  Resource := LockResource(
          LoadResource(0, FindResource(0, 'Image', RT_RCDATA)));
        if Assigned(Resource) then
        ....
.
.
.
end;
doch der pointer (Resource) gibt immer nil (bzw Assigned=false) zurück

was mach ich da falsch?

Christian Seehase 2. Aug 2005 17:21

Re: resource die mit updateresource gespeichert wurde ausles
 
Moin The Game,

ich würde die Aufrufe der Funktionen nicht verschachteln.
So hast Du kaum eine Möglichkeit festzustellen, welcher Funktionsaufruf fehlschlägt, und warum.

Beim Fehlschlagen eines Aufrufes kannst Du, i.d.R., mit GetLastError näher ermitteln was schiefgegangen ist.

TheGame1492 3. Aug 2005 11:12

Re: resource die mit updateresource gespeichert wurde ausles
 
moin,

ich hab die verschachtelung jetzt mal aufgehoben


Delphi-Quellcode:

HI := FindResourceEx(hInstance, 'Image', RT_RCDATA, MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL));
if HI <> 0 then begin
   HG := LoadResource(hInstance, HI);
   if HG <> 0 then begin
     Resource := LockResource( HG );
     if Assigned(Resource) then begin
        ShowMessage('OK!');
        .
        .
        .
das problem liegt bei FindResource

folgende Fehlermeldung spuckt GetLastError aus:

"Der angegebene Resourcentyp wurde nicht in der Image-Datei gefunden"

also RT_RCDATA scheint irgendwie falsch zu sein


kann einer mir da weiterhelfen??

TheGame1492 3. Aug 2005 15:04

Re: resource die mit updateresource gespeichert wurde ausles
 
Delphi-Quellcode:
 Stream.Seek(soFromBeginning,14)
wieso 14 und nicht 0 ???

TheGame1492 4. Aug 2005 13:09

Re: resource die mit updateresource gespeichert wurde ausles
 
hab den fehler endlich gefunden

der ResourceName darf nich 'Image' lauten, scheint denn wohl einen konflikt zu geben


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