Programm resource



  • Wie binde ich bei Borland C++ Builder 2009 eine .exe in das Projekt ein und lass diese dann während der Laufzeit irgendwo hinkopieren ?
    bei VC++ 2008 Express ist das ja einfach.

    Und wozu ist dass Package ? kann man das dafür benutzen ?

    EDIT: wär was fürs faq !



  • Tim06TR schrieb:

    Wie binde ich bei Borland C++ Builder 2009 eine .exe in das Projekt ein und lass diese dann während der Laufzeit irgendwo hinkopieren ?

    Eine exe-Datei ist eine Resource vom Typ RT_RCDATA.

    Einbinden in die Projekt.exe beim BCB2009:
    Project/Resourcen/Hinzufügen. Im Dateifilter AlleDateien(.) markieren, exe Datei auswählen und hinzufügen.
    Wichtig ist nun der Bezeichner der Resource, mit dem wir die Resource im Programm ansprechen.

    Nach dem compilieren ist die Dateigrösse gestiegenen; im Bildeditor die Projekt.res öffnen,
    jetzt Eintrag RC-Daten mit Res-Bezeichener der eingepackten Exe.
    Auf die gleiche Art können auch andere Dateitypen eingepackt werden wie wav, mp3 etc.

    Tim06TR schrieb:

    ..diese dann während der Laufzeit irgendwo hinkopieren ?

    Folgender Schnipsel reicht aus (bei Bedarf Fehlerbehandlung hinzufügen):

    HRSRC hRes;
       HRSRC hMem;
       DWORD sz_exe;
    
       hRes = FindResource( HInstance, "TEST_EXE",  RT_RCDATA );  // Bezeichner beachten
       if ( hRes != NULL) {
          // Resource laden
          hMem = (HRSRC)LoadResource(HInstance, hRes);
          sz_exe = SizeofResource(HInstance, hRes);
    
          TMemoryStream*  mstream = new TMemoryStream;
          mstream->Position = 0;
          mstream->WriteBuffer(hMem, sz_exe);
          // evtl. anderen Pfad festlegen
          mstream->SaveToFile("meine_entpackte.exe");
          delete mstream;
       }
    

    Packages sind eher für eigene (oder auch BCB-) Komponenten.

    mfg
    kpeter



  • Vielen Dank funktioniert wunderbar.
    Zuerst war die Resource falsch benannt, ich dachte ich hätte es geändert, aber
    dann hab ich Time.exe in der Projektverwaltung selektiert und den Bezeichner verändert.


Anmelden zum Antworten