AllocConsole() -> printf/cout
-
if (!AllocConsole()) MessageBox(NULL, L"Fenster wurde nicht erstellt", NULL, MB_ICONEXCLAMATION);
Hiermit habe ich es jetzt mal erzeugt -> Es wird die MSGBox ausgeführt. Hm.. aber wieso ?
-
GetLastError()
aufrufen und Fehlercode angucken.
-
Wie kann ich mir den Fehler denn durch GetLastError() ausgeben bzw angucken ?
EDIT: Ich habe den Rückgabewert (INT) aufgefangen und mit Hilfe einer MsgBox ausgegeben -> 0 ist der Rückgabewert
-
Ohne dir jetzt nahetreten zu wollen: Die MSDN bietet eine ausgezeichnete Hilfe zur WinAPI, in der es zu fast jeder Funktion Beispiele gibt. Und zu
GetLastError()
undFormatMessage()
gibt es ganze tolle Beispiele. Da könnte man mal die Suchmaschine seiner Wahl benutzen.
-
@DocShoe
Ist nicht so, als hätte ich nicht gegoogled.. https://docs.microsoft.com/de-de/windows/win32/debug/retrieving-the-last-error-code
-
@TKuehn
Da ist doch alles drin, was du brauchst.
-
Ja, scheint aber veraltet zu sein. Der Code schmeißt einen Fehler:
if (!GetProcessId(NULL)) ErrorExit(TEXT("GetProcessId"));
const wchar_t* ist mit dem Parameter vom Typ LPTSTR inkompatibel.
-
OK, darum kümmern wir uns dann später.
Probier´ mal die Konsolen-Streams neu zu öffnen:
bool alloc_console() { if( AllocConsole() ) { FILE* console_in= freopen( "conin$", "r", stdin ); FILE* console_out = freopen( "conout$", "w", stdout ); FILE* console_err = freopen( "conout$", "w", stderr ); return console_in && console_out && console_err; } return false; }
Edit: Variablennamen verschönert, bevor sich hier wieder jemand aufregt
-
@DocShoe
Nun funktioniert es. Danke dir !
-
@TKuehn sagte in AllocConsole() -> printf/cout:
Hm.. aber wieso ?
MSDN oder Microsoft Docs sagt:
A process can be associated with only one console, so the AllocConsole function fails if the calling process already has a console. A process can use the FreeConsole function to detach itself from its current console, then it can call AllocConsole to create a new console or AttachConsole to attach to another console.