c++ Programm zur Laufzeit kompilieren
-
Hallo,
folgendes:
Ich habe mir ein Programm geschrieben welches eine Variable ausgibt in der Konsole.
Nun möchte ich ein 2. Programm schreiben, welches die schon compilierte Exe mit einem Parameter gefüttert wird, der dann in die variable eingelesen wird. Ist sowas überhaupt möglich?
Habe mich schon etwas belesen und eine Idee von mir ist es an die Exe einen String anzuhängen der formatiert ist und von der Exe irgendwie ausgelesen werden kann.
schonmal vielen Dank im voraus.mfg
Leon
-
Meines Wissens nach (ich gehöre nicht zu den experten^^) geht das so nicht du könntest die Funktion in eine header datei schreiben diese dann einbinden und dann kannst du die Funktion nutzen.
-
Schau mal nach wozu die argx Paramenter in der main() Funktion sind.
-
Mit Standard-C++ geht das nicht. Du müsstest dich schon tiefer zum entsprechenden Betriebssystem informieren.
Was aber geht und deinem Problem eventuell Abhilfe schafft, sind Filestreams. Du kannst Werte in Dateien schreiben und von anderen Programmen wieder auslesen lassen. Dazu hast du den Standardheader
<fstream>.
-
Die einfachere Variante wäre, wenn dein Programm den Parameter von der Kommandozeile einlesen würde.
Wenn du wirklich die Exe verändern willst (Es kann durchaus Anwendungsfälle geben, wo das nützlich sein kann), geht das auf jeden fall nicht, wärend diese Exe ausgeführt wird.
De Zweiteinfachste Variante ist, falls es eine reine Windowsanwendung ist, du gibst den Programm eine Ressource mit, die du im Programm ausliest und dann in deine Variable schreibst.
Dies hat den Vorteil, dass keine Schmutzigen Tricks nötig sind, um die Daten zu verändern, sondern, dass du das bequem mit der win32-API machen kannst.Das ist definitiv, der Weg, den ich empfehlen würde, wenn das Ändern der Exe wirklich nötig ist.
Die dritte Variante ist fehlerträchig und würde ich nicht empfehlen.
du brauchst im Code ein statische initialisierte Variable.Dann solltest du den Compiler dazu bingen, dass er ein memory-Map file erzeugt. in diesem kannst du schauen, an welche speicherstelle die Variable gelinkt wurde. Diese Adresse, kannst du mit hilfe der Basisadresse der exe in einen Dateioffset umrechnen, an dem die Variable steht.
Mit diesen Informationen kannst du mit einem Hex-Editor (oder per file-funktionen) einen anderen wert schreiben.Dieser Offset kann sich nach einem Neukompilieren der Anwendung natürlich ändern!!!
Alternativ kannst du die Variable natürlich im Code mit einem Makranten Wert initialisieren und diesen in der Exe suchen, aber danb ist es naürlich glück, ob du das richtige ersetzt.
Bei Strings (char* text = "Ich will später verändert werden!!!";) ist das ganze einfach, wenn man nur die Zeichenkette verändern will, sie sllte nur lang genug sein, dass alles reinpasst.
Aber wies gesagt ich würde definitv zur 2. Variante raten, wenn ein Kommandozeilen parameter unerwünscht ist.