[Need Help]Warten bis ein Fenster offen ist
-
http://www.c-plusplus.net/forum/248213?highlight=pipe
guck mal darein, da benutze ich irgendwo CreateProcess
Du solltest mindestens die Startupinfo - Struktur mit Nullen füllen und die Strukturgröße ins erste Member eintragen.
Hab Grad keinen PC, mehr kann ich deshalb erst morgen beitragen.
Aber wahrscheinlich reicht Dir das Beispiel aus dem og Thread.
-
Okay, hier ein vollständiges Beispiel:
#include <windows.h> #include <iostream> int main() { PROCESS_INFORMATION pi; STARTUPINFO si; ZeroMemory(&si,sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); CreateProcess(NULL, "notepad.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); WaitForInputIdle(pi.hProcess, INFINITE); std::cout << "Gestartet\n"; WaitForSingleObject(pi.hProcess, INFINITE); std::cout << "Beendet\n"; }
-
So vollständig ist das Bsp. auch nicht.
Was machst Du wenn WaitForInputIdle WAIT_FAILED zurückgibt?
-
Belli schrieb:
Okay, hier ein vollständiges Beispiel:
#include <windows.h> #include <iostream> int main() { PROCESS_INFORMATION pi; STARTUPINFO si; ZeroMemory(&si,sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); CreateProcess(NULL, "notepad.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); WaitForInputIdle(pi.hProcess, INFINITE); std::cout << "Gestartet\n"; WaitForSingleObject(pi.hProcess, INFINITE); std::cout << "Beendet\n"; }
Ich danke dir vielmals, das seltsame ist habe deineBeispiel grade einmal 1:1 in mein Visual C++ 2010 Kopiert und versucht zu Compilen ,und es kommt wieder die Fehlermeldung :
Konvertierung des Parameters 2 von 'const char [12]' in 'LPWSTR' nicht möglich . Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
daraufhin versuchte ich den Text mit dem L und danach der TEXT() Funktion zu übergeben woraufhin wieder keine Compiler Fehler kahmen ,beim ausführen des Programms jedoch kommt weiterhin die Meldung das Programm wird nicht richtig ausgeführt.
Daraufhin habe ich das Beispiel mal in meine Dev C++ kopiert ,kompilliert und siehe da weder eine Compiler warnung noch die Fehlermeldung beim ausführen ,und Notepad.exe öffnet sich
Hat jmd noch ne Idee wie ich in Visual C++ 2010 den Text übergeben kann ,so dass das Programm später auch funktioniert ?^^
Ich meine zur not nehm ich Dev C++ ,aber die Visual c++ entwicklungsumgebung finde ich deutlich angenehmer zum Programmieren als Dev C++.
-
DerNoob1993 schrieb:
Ich danke dir vielmals, das seltsame ist habe deineBeispiel grade einmal 1:1 in mein Visual C++ 2010 Kopiert und versucht zu Compilen ,und es kommt wieder die Fehlermeldung : [code="cpp"]Konvertierung des Parameters 2 von 'const char [12]' in 'LPWSTR' nicht möglich .
Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.Das liegt an Deinen Projekteinstellungen, Du hast ein UNICODE-Projekt, deshalb musst Du Stringliterale als L("...) (oder universell als TEXT("...) schreiben, ich übersetze als Multibyte - Projekt.
daraufhin versuchte ich den Text mit dem L und danach der TEXT() Funktion zu übergeben woraufhin wieder keine Compiler Fehler kahmen ,beim ausführen des Programms jedoch kommt weiterhin die Meldung das Programm wird nicht richtig ausgeführt.
Mhm, wird es denn überhaupt gelinkt? Wird eine exe-Datei erstellt? Falls nicht, musst Du im Projekt evtl. noch explizit die user32.lib als mitzulinkende Datei einstellen.
Alternativ kannst Du ja mal versuchen, aus der VS - Konsole zu übersetzen/linken:
Start/Programme/Visual C++ .../Visual Studio Tools/Visual Studio Eingabeaufforderung
dann in das Verzeichnis navigieren, in dem die Quelldatei steht, dann:
cl /EHsc progname.cpp user32.lib
dann musst Du allerdings die Strings wieder so schreiben wie in meinem Beispiel oben, oder eben universell mit TEXT("progname.exe")
-
Belli schrieb:
DerNoob1993 schrieb:
Ich danke dir vielmals, das seltsame ist habe deineBeispiel grade einmal 1:1 in mein Visual C++ 2010 Kopiert und versucht zu Compilen ,und es kommt wieder die Fehlermeldung : [code="cpp"]Konvertierung des Parameters 2 von 'const char [12]' in 'LPWSTR' nicht möglich .
Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.Das liegt an Deinen Projekteinstellungen, Du hast ein UNICODE-Projekt, deshalb musst Du Stringliterale als L("...) (oder universell als TEXT("...) schreiben, ich übersetze als Multibyte - Projekt.
daraufhin versuchte ich den Text mit dem L und danach der TEXT() Funktion zu übergeben woraufhin wieder keine Compiler Fehler kahmen ,beim ausführen des Programms jedoch kommt weiterhin die Meldung das Programm wird nicht richtig ausgeführt.
Mhm, wird es denn überhaupt gelinkt? Wird eine exe-Datei erstellt? Falls nicht, musst Du im Projekt evtl. noch explizit die user32.lib als mitzulinkende Datei einstellen.
Alternativ kannst Du ja mal versuchen, aus der VS - Konsole zu übersetzen/linken:
Start/Programme/Visual C++ .../Visual Studio Tools/Visual Studio Eingabeaufforderung
dann in das Verzeichnis navigieren, in dem die Quelldatei steht, dann:
cl /EHsc progname.cpp user32.lib
dann musst Du allerdings die Strings wieder so schreiben wie in meinem Beispiel oben, oder eben universell mit TEXT("progname.exe")Das seltsame ist es wird wenn ich den string mit L "" oder TEXT("") übergeben will kein Fehler angezeigt ,und es wird auch eine ausführbare .exe Datei erstellt ,sobald ich diese aber starte kommt die Fehlermeldung
"Projektname.exe funktioniert nichtmehr es wird nach einer Lösung für das Problem gesucht" .
-
Wie gesagt, dass Du L oder besser TEXT vor Deine Strings schreiben musst, ist nicht seltsam, das liegt an Deinen Projekteinstellungen!
Wenn Du das hinzufügst, wird auf jeden Fall schon mal kompiliert, das heißt aber nicht, dass auch gelinkt wird.
Sieh doch mal nach, ob eine exe - Datei überhaupt erstellt wird, falls nicht, siehe mein letztes Posting.
-
Belli schrieb:
Wie gesagt, dass Du L oder besser TEXT vor Deine Strings schreiben musst, ist nicht seltsam, das liegt an Deinen Projekteinstellungen!
Wenn Du das hinzufügst, wird auf jeden Fall schon mal kompiliert, das heißt aber nicht, dass auch gelinkt wird.
Sieh doch mal nach, ob eine exe - Datei überhaupt erstellt wird, falls nicht, siehe mein letztes Posting.Wie gesagt es wird ne .exe erstellt ,und es kommen sobald ich mit TEXT("") oder L"" den String übergebe keine Fehlermeldungen .
Wenn ich nun aber die exe welche erstellt wurde ausführen will kommt nur die Fehlermeldung " Projektname.exe funktioniert nichtmehr es wird nach einer Lösung für das Problem gesucht " und nein das seltsame ist nicht wie ich die Strings übergeben muss das ist mir relativ klar warum ,das seltsame ist dass eine .exe Datei ohne Compiler Warnungen erstellt wird welche beim ausführen aber die oben genannte Windows Fehlermeldung ausgibt. Wie gesagt bei Dev c++ geht alles einwandfrei es liegt scheinbar an irgendeiner einstellung meines Compilers :p
-
Versuch doch mal, die exe aus der Konsole heraus zu erstellen, wie oben beschrieben. In der IDE sind ja jede Menge Einstellungen oder eben auch nicht, die möglicherweise nicht so einfach alle zu überprüfen sind.
Beim Erstellen aus der Konsole hast Du dieses 'Problem' erst mal nicht.
-
Belli schrieb:
Versuch doch mal, die exe aus der Konsole heraus zu erstellen, wie oben beschrieben. In der IDE sind ja jede Menge Einstellungen oder eben auch nicht, die möglicherweise nicht so einfach alle zu überprüfen sind.
Beim Erstellen aus der Konsole hast Du dieses 'Problem' erst mal nicht.Ohje sowas hab ich noch nie gemacht dummerweise arbeitet mein Buch (C++ Primer)
nicht mit einer bestimmten IDE ,weshalb ich mich mit meinem Compiler noch nicht so gut auskenne ich denke mal ich werde dieses Projekt einfach mit Dev C++ erstellen ,da ich lieber erstmal die Sprache richtig lernen will bevor ich mich auch noch mit meinem Compiler auseinandersetze
Ich danke euch allen echt vielmals für die Hilfe
-
Sprache und Werkzeug gehen Hand in Hand, das eine nützt nichts ohne das andere. Anstatt gleich umzudrehen, sobald der Weg mal etwas steiler wird, nutze das doch als Chance, mehr über den Umgang mit deiner IDE bzw. deinem Compiler zu lernen. Falls du keine IDE benutzt, besorg dir eine. Für Windows lautet die klare Empfehlung Visual C++, für Linux Code::Blocks oder vermutlic QtCreator.
-
dot schrieb:
Sprache und Werkzeug gehen Hand in Hand, das eine nützt nichts ohne das andere. Anstatt gleich umzudrehen, sobald der Weg mal etwas steiler wird, nutze das doch als Chance, mehr über den Umgang mit deiner IDE bzw. deinem Compiler zu lernen. Falls du keine IDE benutzt, besorg dir eine. Für Windows lautet die klare Empfehlung Visual C++, für Linux Code::Blocks oder vermutlic QtCreator.
Stimm ich dir schon zu ,aber ich habe keine Ahnung wie ich ein Projekt mit der Visual Studio Eingabeaufforderung erstelle:) und wenn man nach "C++ Anwendung aus Konsole heraus erstellen "googelt kommen nur 100000 Anfänger tuts mit dem Hallo Welt Programm ,aber keine Hilfestellung wie man eine anwendung aus der Konsole heraus erstellt
-
Ah, ich dachte es geht hier um den Umgang mit Visual Studio. Selber per Hand in der Konsole kompilieren ist natürlich auch eine potentiell sehr lehrreiche Erfahrung aber das meinte ich gar nicht, da hab ich oben wohl was falsch verstanden bzw. nicht genau genug gelesen.
-
dot schrieb:
Ah, ich dachte es geht hier um den Umgang mit Visual Studio. Selber per Hand in der Konsole kompilieren ist natürlich auch eine potentiell sehr lehrreiche Erfahrung aber das meinte ich gar nicht, da hab ich oben wohl was falsch verstanden bzw. nicht genau genug gelesen.
Achso ne ich glaub ich bin der der was missverstanden hatte. Ich habe gedacht ich soll mein Projekt aus der Konsole heraus erstellen ,dadurch würde der Fehler den ich mit Visual C++ habe behoben
Finde es aber echt schade dass ich dieses Projekt nicht mit Visual C++ erstellen kann woran liegt ein solcher Fehler denn normalerweise?
( Der Fehler ist ,dass ohne Compiler Warnungen eine .exe Datei erstellt wird , wenn ich diese allerdings starte kommt nur die Fehlermeldung " Projektname.exe funktioniert nichtmehr " kann mir das einfach nicht erklären ,und finde es auch bisschen schwach von meinem Compiler ,dass er eine nicht funktionierende exe erstellt ,aber keinerlei warnungen ausgibt woran ich merken könnte wo das Problem liegt.
-
DerNoob1993 schrieb:
Stimm ich dir schon zu ,aber ich habe keine Ahnung wie ich ein Projekt mit der Visual Studio Eingabeaufforderung erstelle:)
Hab ich Dir doch oben erklärt. Wenn Du die VS Konsole erst mal offen hast, hast Du schon die halbe Miete!
Im obigen Beispiel hast Du ja nur eine Quelldatei - nennen wir sie mal prog.cpp - mit dem oben von mir geposteten Inhalt. Die liegt ja in irgendeinem Verzeichnis auf Deiner Platte.
In dieses Verzeichnis navigierst Du Dich mit der Konsole mittels cd (das kennst Du hoffentlich?).
Wenn du angekommen bist, tippst Du ein:
cl /EHsc prog.cpp user32.lib
cl ist der Compileraufruf, /EHsc ist ein Schalter, den C++ Programme gerne haben wollen (cl übersetzt grundsätzlich auch C-Programme), prog.cpp ist Deine Quelldatei und user32.lib ist eine Windows-Library, die die WaitForIdleInput - Funktion beherbergt.
cl übersetzt jetzt Deine Quelldatei und wenn Du es nicht explizit (durch Schalter /c) ausschließt, ruft es danach auch den Linker auf und linkt die entstandene Objektdatei prog.obj mit der user32.lib zu einer ausführbaren exe-Datei zusammen.
Wenn kein Fehler auftritt, solltest Du jetzt in dem Verzeichnis die prog.obj als Zwischenergebnis und die prog.exe als Endprodukt haben.
Letztere startest Du nun einfach durch Eingabe von prog
So einfach ist das ...
Dann kannst Du sicher sein, dass nicht irgendwelche Compiler/Linker-Optionen gesetzt sind, von denen Du nichts weißt.
-
Belli schrieb:
DerNoob1993 schrieb:
Stimm ich dir schon zu ,aber ich habe keine Ahnung wie ich ein Projekt mit der Visual Studio Eingabeaufforderung erstelle:)
Hab ich Dir doch oben erklärt. Wenn Du die VS Konsole erst mal offen hast, hast Du schon die halbe Miete!
Im obigen Beispiel hast Du ja nur eine Quelldatei - nennen wir sie mal prog.cpp - mit dem oben von mir geposteten Inhalt. Die liegt ja in irgendeinem Verzeichnis auf Deiner Platte.
In dieses Verzeichnis navigierst Du Dich mit der Konsole mittels cd (das kennst Du hoffentlich?).
Wenn du angekommen bist, tippst Du ein:
cl /EHsc prog.cpp user32.lib
cl ist der Compileraufruf, /EHsc ist ein Schalter, den C++ Programme gerne haben wollen (cl übersetzt grundsätzlich auch C-Programme), prog.cpp ist Deine Quelldatei und user32.lib ist eine Windows-Library, die die WaitForIdleInput - Funktion beherbergt.
cl übersetzt jetzt Deine Quelldatei und wenn Du es nicht explizit (durch Schalter /c) ausschließt, ruft es danach auch den Linker auf und linkt die entstandene Objektdatei prog.obj mit der user32.lib zu einer ausführbaren exe-Datei zusammen.
Wenn kein Fehler auftritt, solltest Du jetzt in dem Verzeichnis die prog.obj als Zwischenergebnis und die prog.exe als Endprodukt haben.
Letztere startest Du nun einfach durch Eingabe von prog
So einfach ist das ...
Dann kannst Du sicher sein, dass nicht irgendwelche Compiler/Linker-Optionen gesetzt sind, von denen Du nichts weißt.
Edit: JUHUUU es hat kompiliert ,und wird ausgeführt ich liebe dich
-
Schön! Dann liegt es an irgendwelchen in Deiner IDE verborgenen Einstellungen ... aber die sind natürlich schwieriger auf die Ferne abzuklären.
Ich benutze die eigentlich nur für wirklich große Projekte, wenn ich den Debugger benötige.
Für alles andere gehe ich auch wie oben beschrieben vor.
-
DerNoob1993 schrieb:
Finde es aber echt schade dass ich dieses Projekt nicht mit Visual C++ erstellen kann woran liegt ein solcher Fehler denn normalerweise?
Zwischen Tastatur und Bildschirm...
DerNoob1993 schrieb:
( Der Fehler ist ,dass ohne Compiler Warnungen eine .exe Datei erstellt wird , wenn ich diese allerdings starte kommt nur die Fehlermeldung " Projektname.exe funktioniert nichtmehr " kann mir das einfach nicht erklären ,und finde es auch bisschen schwach von meinem Compiler ,dass er eine nicht funktionierende exe erstellt ,aber keinerlei warnungen ausgibt woran ich merken könnte wo das Problem liegt.
Daran, dass dein Programm fehlerhaft ist, z.B. weil du einen ungültigen Zeiger dereferenzierst oder sonst was. Verwend den Debugger von Visual Studio um rauszufinden, was genau schiefläuft.
-
Unfassbar...
-
dot schrieb:
DerNoob1993 schrieb:
Finde es aber echt schade dass ich dieses Projekt nicht mit Visual C++ erstellen kann woran liegt ein solcher Fehler denn normalerweise?
Zwischen Tastatur und Bildschirm...
DerNoob1993 schrieb:
( Der Fehler ist ,dass ohne Compiler Warnungen eine .exe Datei erstellt wird , wenn ich diese allerdings starte kommt nur die Fehlermeldung " Projektname.exe funktioniert nichtmehr " kann mir das einfach nicht erklären ,und finde es auch bisschen schwach von meinem Compiler ,dass er eine nicht funktionierende exe erstellt ,aber keinerlei warnungen ausgibt woran ich merken könnte wo das Problem liegt.
Daran, dass dein Programm fehlerhaft ist, z.B. weil du einen ungültigen Zeiger dereferenzierst oder sonst was. Verwend den Debugger von Visual Studio um rauszufinden, was genau schiefläuft.
Naja mein Programm ( der Quelltext) an sich war ja nicht Fehlerhaft es lag an irgendeiner Compiler einstellung , als ich es mit der Eingabeaufforderung erstellt habe hat ja auch alles einwandfrei geklappt und mein Programm läuft nun einwandfrei
Ich weiß ihr denkt euch jetzt alle oh mann er will sowas Programmieren und hat kaum Ahnung von seinem Compiler / wusste nichtmal wie man ein Projekt aus der Konsole heraus erstellt, aber mein Buch womit ich lerne gibt halt wie gesagt zu einzelnen Compilern kaum- garkeine Infos ,weshalb ich mich damit einfach leider noch nicht gut auskenne ,aber letztendlich hat ja alles einwandfrei geklappt