Frage

Gibt es eine Möglichkeit, eine bestehende EXE-Datei mit anderen C ++ Quelldateien während der Kompilierung zu verknüpfen? Was ich versuche eigentlich zu komprimieren zu tun und zu dekomprimieren einige Dateien in meinem Konsolenprogramm mit LZMA (7zip) SDK, aber leider ist es sehr schwierig für einen Neuling zu verwenden.

Es gibt eine Kommandozeilenversion von genannt LZMA 7za.exe und ich frage mich, ob ich irgendwie mein Programm einbetten kann es in und verwenden Sie es wie eine Funktion. Es kann leicht mit system () Funktion verwendet werden (was eine sehr gefährliche Sache zu Nutzen zu sein scheint), aber dann, wenn ich mein Programm an jemanden senden, hat 7za.exe nicht in den richtigen Ordnern wird es nicht funktionieren.

Ich kam über Createprocess () Funktion in windows.h Header-Dateien, aber es scheint zu erreichen, welches System () führt in einer richtigen und fortschrittliche Art und Weise. Ich weiß nicht, ob es kann eigentlich die exe-Datei wie eine Objektdatei beim Kompilieren

War es hilfreich?

Lösung

CreateProcess() ist ein Windows-API-Aufruf einen Prozess zu starten, genau so, wie es sich anhört, als Kind des Programms, dass Sie es die durch das Wissen, HANDLE steuern kann. system() führt einen Systembefehl. Das ist so viel, wie Sie jemals wissen werden, und ich vermeiden, persönlich es unter allen Umständen mit - nicht zuletzt, weil es nicht tragbar ist (die Funktion existiert unter Windows und Linux, aber der Befehl nicht)

.

Es ist möglich, die Daten an das Ende einer EXE Bild anhängen - das ist, wie Installateure arbeiten. Werfen Sie einen Blick auf diese Microsoft-Support-Artikel , die bizarr Sie Code in Grund gibt, aber Sie sollten sein die Lage, es in C ++ zu drehen trivialen. Hier ist ein Artikel über einen Self-Extractor zu schaffen , die besser geeignet sein könnte. Beide sollten Sie einbetten Dateien in der EXE-Datei ermöglichen.

ich nicht empfehlen Sie 7za extrahieren und aus System() oder CreateProcess() zu nennen - Ich empfehle Ihnen das SDK zu lernen. Es ist schwierig, aber Sie werden eine Menge zu tun, es lernen.

Schließlich, wie Sie eine vorhandene EXE-Datei ändern müssen, werden Sie diese nicht in der Lage sein zu tun, bei der Kompilierung-Zeit. Sie werden den Code hinzufügen, was zu einem eigenen Bild oder ein anderes Bild haben müssen.

Weitere Einzelheiten zu Adressierungsdaten zu einer exe angehängt .

Andere Tipps

Okay, versuchen, diese ...

  1. Schreiben Sie eine Befehlszeilenprogramm, dass nur kopiert eine Datei an das Ende eines anderen. Sie können dies tun, mit Windows-Datei-I / O oder Shell-Befehlen.
  2. Erstellen Sie einen Post-Build-Schritt, der dieses Dienstprogramm ausgeführt wird. Ihr Programm verknüpft vollständig die übliche Art und Weise, und dann Dienstprogramm lediglich append Bytes der zweiten exe auf das Ziel exe.

Das ist der Verknüpfungsschritt. Jetzt Laufzeit Zugriff auf die exe ist eine andere Sache. Im Wesentlichen ist der Algorithmus folgt aus:

  1. Öffnen Sie die EXE-Datei in einem Binär-Editor auf Byte-Ebene eingebettet werden (msdev.exe tun wird). Beachten Sie die ersten 30 oder 40 Bytes als eindeutige Marker für den Anfang der Datei.
  2. Schreiben Sie eine Funktion, die die Verbindung Datei erstellt oben und sucht die eingebettete Datei durch die Suche nach dem einzigartigen Marker öffnet.
  3. Sobald der Anfang der eingebetteten Datei gefunden wird, kopieren Sie die Bytes der Datei in eine zweite neue Datei mit Datei-I / O.
  4. Führen Sie das neue Dateisystem () oder ähnliche API.

Wenn Sie jemand anderes arbeiten auf diese Weise verteilen Sie bitte die Lizenzierung korrekt erhalten. Es ist im Allgemeinen einer Urheberrechtsverletzung jemand anderes binär in der eigenen zu werfen -. Es gibt Ausnahmen, natürlich

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top