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 TResourceStream NUR Win32 API Funktion! (andere Möglichkeit) (https://www.delphipraxis.net/43644-tresourcestream-nur-win32-api-funktion-andere-moeglichkeit.html)

schorfi 6. Apr 2005 19:37


TResourceStream NUR Win32 API Funktion! (andere Möglichkeit)
 
Hallo,

ich schreibe derzeit ein kleines Tool für mich, welches nur auf Win32 API funktioniert (ohne Delphi-Klassen), sprich "uses Windows, Messages".

Dateigröße beträgt schöne 80 Kb bisher, also funktioniert alles super, außer eine Sache.

Ich habe eine Resource Datei in mein Projekt eingebunden (2 mal EXEFILE).

Nach Start meines Programmes sollen die EXEFILES gestartet werden. Dementsprechend soll also die Resource Datei extrahiert werden (in ein Temp-Ordner) und die beiden Exe-Dateien ausgeführt werden!

Habe dazu nur folgende Anleitung gefunden: http://www.swissdelphicenter.ch/de/showcode.php?id=594

Das Problem: die Klasse: "Controls" müsste eingefügt werden, welches meine Exe auf 500 KB explodieren lässt.

Hat jemand nen Link oder einfach nur Stichwörter nach den ich Suchen muss, um auf Win32 API zurück zugreifen, ohne TResourceStream nutzen zu müssen.




Vielen Dank!

Luckie 6. Apr 2005 19:40

Re: TResourceStream NUR Win32 API Funktion! (andere Möglichk
 
Von Assarbad ist folgende Funktion:
Delphi-Quellcode:
{ following code is copied directly from Assarbad }

function putbinresto(binresname: string; path: string): boolean;
var
  ResSize, HG, HI, SizeWritten, hFileWrite: Cardinal;
begin
  result := false;
  //find resource
  HI := FindResource(hInstance, @binresname[1], 'BINRES');
  //if legal handle, go on
  if HI <> 0 then
  begin
    //load resource and check the handle
    HG := LoadResource(hInstance, HI);
    if HG <> 0 then
    begin
      //check resource size (needed to copy a block of data)
      ResSize := SizeOfResource(hInstance, HI);
      //create the file
      hFileWrite := CreateFile(@path[1], GENERIC_READ or GENERIC_WRITE,
        FILE_SHARE_READ or FILE_SHARE_WRITE, nil, CREATE_ALWAYS,
        FILE_ATTRIBUTE_ARCHIVE, 0);
      //if succeeded ...
      if hFileWrite <> INVALID_HANDLE_VALUE then
      try
        //write to it
        result := (WriteFile(hFileWrite, LockResource(HG)^, ResSize,
          SizeWritten, nil) and (SizeWritten = ResSize));
      finally
        //close file
        CloseHandle(hFileWrite);
      end;
    end;
  end;
end;

Mephistopheles 6. Apr 2005 19:42

Re: TResourceStream NUR Win32 API Funktion! (andere Möglichk
 
http://www.faqsen.de/servlet/Faqsen?...s_html.zip&P=0

Nach BINRES suchen.

schorfi 6. Apr 2005 22:39

Re: TResourceStream NUR Win32 API Funktion! (andere Möglichk
 
Ich danke euch beiden! Hat super gefunzt... Lang lebe Win32 API!






Euer Schorfi.... :dancer:


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