.exe parameter verarbeiten
-
Schönen Nachmittag!
Will im Borland C++ Builder eine .exe aufrufen und der Parameter des Aufrufes soll in der aufgerufenen .exe weiterverarbeitet werden.
um es ein bisschen verständlicher zu machen, weil das eben gerade konfus war ;):
"Programm1.exe" hat einen Button von dem aus "Programm2.exe" aufgerufen wird. "Programm1.exe" übergibt einen Parameter ("Text").
Das Ganze hab ich mit der Funktion spawnl gemacht:#include <process.h> char *v = "Text"; spawnl(P_NOWAIT, "Programm2.exe", "Programm2.exe", v, Null);
Wie kann ich jetzt eben auf *v von Programm2.exe aus zugreifen?
Bin auch für andere Lösungen mittels exec oder ShellExecute offen =).Danke und Grüße,
Hagbard
-
BCB-Hilfe zu ParamCount / ParamStr
-
ich habe mir die beispiele in der hilfe dazu angesehen, bin aber nicht wirklich schlauer daraus geworden .. kannst du es mir bitte in der praxis zeigen?
grüße
hagbard
-
Ähmm... einfacher geht es eigentlich gar nicht mehr. ParamCount() ermittelt die Anzahl der übergebenen Parameter und mit ParamStr(i) bekommst du den i-ten Parameter als AnsiString.
-
²dasd .. aber ich bekomme den Parameter im aufgerufenen Programm dann nicht
ich weiß nicht was ich falsch mache ...
-
hagbard_ schrieb:
Ich weiß nicht was ich falsch mache ...
Leider ist beim letzten Transport aus der Generalüberholung unser kompletter Bestand an Kristallkugeln zerstört worden. Ich muss dich deshalb leider bitten, doch ein Wenig Mitleid mit uns zu haben und mal den Code deines Versuchs zu zeigen...
-junix
-
Leider ist beim letzten Transport aus der Generalüberholung unser kompletter Bestand an Kristallkugeln zerstört worden. Ich muss dich deshalb leider bitten, doch ein Wenig Mitleid mit uns zu haben und mal den Code deines Versuchs zu zeigen...
na dann bin ich ja mal beruhigt .. ich befürchtete schon, ihr hättet eure Fähigkeit, hellzusehen verloren.
so, mein code :):
Project1.exe:
void __fastcall TForm1::Button1Click(TObject *Sender) { char* v = "test"; spawnl(P_NOWAIT, "Project2.exe", "Project2.exe", v, NULL); }
Project2.exe:
void __fastcall TForm3::FormActivate(TObject *Sender) { for (int i=1;i<=ParamCount();i++) { if (LowerCase(ParamStr(i)) != "test") ShowMessage("Erfolgreich ..."); } }
Grüße und besten Dank
Matthi
-
hagbard_ schrieb:
Project2.exe:
[cpp]
void __fastcall TForm3::FormActivate(TObject *Sender)
{
for (int i=1;i<=ParamCount();i++)
{
if (LowerCase(ParamStr(i)) != "test")
ShowMessage("Erfolgreich ...");}
}
[/cpp]Warum "!="?
-
sorry mein fehler .. hab schon == gemacht .. nur hab ich dann mal was geändert, weil ich dachte, er kennt die zeichenkette nicht .. funktioniert mit == genausowenig
lg hagbard
-
Hast du dir einzelnen Werte schoneinmal angeschaut? Vielleicht funktioniert ja auch der Programmaufrauf mittels spawn... nicht richtig.
-
hmm, thx für den hinweis .. interessant ist, dass ich, wenn ich paramstr(1) in project1.exe an showmessage übergebe, ich eine leeres dialogfeld als ausgabe bekomme .. keine änderungen beim code .. was kann da falsch sein?
grüße und dank
hagbard
-
ups, habe eine konvertierung in ansistring vergessen .. dann kommt in project1.exe die richtige ausgabe, aber in project2.exe kann ich immer noch nicht auf ParamStr(1) zugreifen
lg hagbard
-
Versuch mal die project2.exe direkt von der Konsole zu starten. Dann kannst du wenigsten endgültig herausbekommen, in welchem Programm der Fehler steckt.
-
Du kannst auch die Parameter über das Menü Start|Parameter im BCB eintragen, um Dein Projekt zu debuggen, anstatt das Programm von
der Konsole aus zu starten.Gruß,
Alexander
-
habe jetzt das Programm (Project2.exe) aus der Konsole gestartet .. jedoch passiert auch nichts anderes als sonst
Hmm ... weiß keiner weiter?
Kann es vielleicht jemand selbst auf seinem Rechner ausprobieren?
Wäre äußerst dankbar!Grüße
hagbard
-
hagbard_ schrieb:
Hmm ... weiß keiner weiter?
Hast Du meinen Vorschlag auch ausprobiert? So kannst Du nämlich genau debuggen, ob Dein Projekt2.exe das tut, was es soll.
Gruß,
Alexander
-
aja, habe ich zuerst nicht beachtet
habe dort als parameter "test" eingegeben - erfolgslos - unveränderte ausgabe.. von project1.exe kann ich ja immer ganz normal auf die parameter zugreifen, nur von project2.exe funkt es eben leider nicht - ich verstehe leider immer noch nicht, was ich falsch machegrüße
hagbard
-
hagbard_ schrieb:
Kann es vielleicht jemand selbst auf seinem Rechner ausprobieren?
Kannst es mir ja mal zuschicken (Mail im Profil). Am besten mit Quelltext.
-
Dasd schrieb:
Kannst es mir ja mal zuschicken (Mail im Profil). Am besten mit Quelltext.
Oder noch besser mal ein bisschen Source-Code hier rein posten. Dann können Dir
a) vielleicht mehr Leute helfen
b) andere auch noch was lernenGruß,
Alexander
-
ok, poste ich nochmal meine sourcecode:
also habe ein formular mit einem button und ich rufe dann die andere .exe auf (über den button) mit folgender funktion:Quellcode in der Unit1.cpp:
void __fastcall TForm1::Button1Click(TObject *Sender) { char* v = "test"; spawnl(P_NOWAIT, "Project2.exe", "Project2.exe", v, NULL); for (int i=1;i<=ParamCount();i++) { if (LowerCase(ParamStr(i)) == "test") ShowMessage("Erfolgreich ..."); } //hier liest er die Parameter richtig aus }
und nun in der unit2.cpp, welche sich in der anderen (Project2.exe) exe befindet:
void __fastcall TForm3::FormActivate(TObject *Sender) { for (int i=1;i<=ParamCount();i++) { if (LowerCase(ParamStr(i)) == "test") ShowMessage("Erfolgreich ..."); else ShowMessage("Nicht!"); } //hier scheint das Ganze ignoriert zu werden }
wahrscheinlich habe ich mich vorhin ein wenig unklar ausgedrückt .. vielleicht ist es jetzt ein wenig verständlicher
grüße
hagbard