Programmstart-Funktion lässt sich nicht kompilieren
-
Hi, ich gehe grad so ein E-Book durch, um mich ein bisschen in C++ einzuarbeiten. Allerdings will er den fett markierten Code nicht kompilieren:
void CControlsDlg::OnBnClickedRunpgm() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. // Aktuelle Werte vom Bildschirm holen UpdateData(TRUE); // Lokale Variable zur Aufnahme des Programmnamens deklarieren CString strPgmName; // Programmname in die lokale Variable kopieren strPgmName = m_strProgToRun; // Programmname in Großbuchstaben umwandeln strPgmName.MakeUpper(); // Programm Paint gewählt? if (strPgmName == "PAINT") // Ja, Paint starten WinExec("mspaint.exe ", SW_SHOW); // Programm Notepad (Editor) gewählt? if (strPgmName == "NOTEPAD") // Ja, Notepad starten WinExec("notepad.exe ", SW_SHOW); // Programm Solitaire gewählt? if (strPgmName == "SOLITAIRE") // Ja, Solitaire starten WinExec("sol.exe ", SW_SHOW); [b]// Anderer Programmname ins Kombinationsfeld eingeben if ((strPgmName != "PAINT") && (strPgmName != "NOTEPAD") && (strPgmName != "SOLITAIRE")) // Ja, eingegebenes Programm ausführen WinExec(strPgmName , SW_SHOW);[/b] }Eingesetzte Software ist Visual Studio 2005.
Für schnelle Hilfe wäre ich sehr dankbar!
-
Sollen wir hellsehen was für einen Fehler der Compiler ausspuckt oder wie? Und ausserdem ist WinExec seit 100 Jahren veraltet. Benutz CreateProcess.
-
In VC2005 ist per default alles UNICODE. Somit verwende für String-Lietrale bitte das _T makro!
Also z.B._T("PAINT")
-
ggdggdf schrieb:
Sollen wir hellsehen was für einen Fehler der Compiler ausspuckt oder wie? Und ausserdem ist WinExec seit 100 Jahren veraltet. Benutz CreateProcess.
1>z:\visual studio 2005\projects\controls\controls\controlsdlg.cpp(315) : error C2664: 'WinExec': Konvertierung des Parameters 1 von 'CString' in 'LPCSTR' nicht möglich
1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
-
Wie gesagt, Du verwendest UNICODE und WinExec kann kein Unicode... WinExec sollte auch nicht mehr verwendet werden (siehe Doku).
Verwende entweder CreateProcess oder ShellExecute, da hast Du dann diese Probleme nicht.
-
Kenn mich mit CString nicht aus, aber vielleicht sowas wie strPgmName.c_str(); ?!