Problem mit WinAPI



  • Ich schätze, Du hast uns in Deiner Fehlermeldung
    'Ein Typ vom ""const char*"" kann einer Entität vom Typ ""LPCSTR"" nicht zugewiesen werden.'
    ein 'W' unterschlagen:
    'Ein Typ vom ""const char*"" kann einer Entität vom Typ ""LPCWSTR"" nicht zugewiesen werden.'



  • Okay bei mir ist noch was passirt ich hab jz zwar alles fertig aber das Fenster geht immer noch nich auf dafür aber kommt diese Fehler meldung:
    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler LNK2019 Verweis auf nicht aufgelöstes externes Symbol "_main" in Funktion ""int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)".
    Auch kann ich das Problem ort nich öffnen

    #include <Windows.h>
    #include <cassert>
    
    LRESULT CALLBACK MessageHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    	switch(uMsg) {
    	case WM_CLOSE:
    
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		return 0;
    	}
    	return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    
    	WNDCLASS wc;
    	HWND hWnd;
    	MSG msg;
    
    	wc = {};
    	wc.style = CS_HREDRAW | CS_VREDRAW;
    	wc.lpfnWndProc = MessageHandler;
    	wc.hInstance = hInstance;
    	wc.lpszClassName = L"Login";
    
    	assert(RegisterClass(&wc));
    
    	hWnd = CreateWindow(L"Login", L"Login", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, 0, 0, hInstance, 0);
    
    	ShowWindow(hWnd, nCmdShow);
    	SetForegroundWindow(hWnd);
    	SetFocus(hWnd);
    	UpdateWindow(hWnd);
    	
    	while (true) {
    		BOOL result = GetMessage(&msg, 0, 0, 0);
    		if (result > 0) {
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    		else {
    			return result;
    		}
    	}
    }
    


  • @Belli Oh stimmt tschuldige.



  • @Lukas188 sagte in Problem mit WinAPI:

    Fehler LNK2019 Verweis auf nicht aufgelöstes externes Symbol "_main" in Funktion ""int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)".

    Du musst Deinem Linker sagen, dass Du ein Windows-Programm - im Gegensatz zu einem Konsolenprogramm - haben willst. Letzteres hat eine main-Funktion als Einsprungpunkt, ersteres eine WinMain:
    https://docs.microsoft.com/de-de/cpp/build/reference/subsystem-specify-subsystem?view=msvc-160



  • @Lukas188 sagte in Problem mit WinAPI:

    Also ich habe keine Ahnung was da los is... Ich habe erst vor einer Woche mit C++ angefangen..

    Du hast erst angefangen und programmierst die WinAPI? Das nenne ich ambitioniert. 👍

    Die WinAPI ist in C programmiert, nutzt einige spezielle C Techniken und ist nicht gerade Typ sicher. Es bedarf einiger Zeit und einiger Motivation die WinApi zu erlernen.

    Die WinAPI nutzt eine Reihe von Prefixes welche man kennen muss.

    Ebenso sollte man die Unicode/ASCII Stringverwaltung kennen.

    Wenn du diese kennst, kannst du bei unbekanntem Befehlen wie beispielsweise _stprintf_l die Grundlagen der Funktion erkennen.



  • @Lukas188 sagte in Problem mit WinAPI:

    assert(RegisterClass(&wc))

    Entferne mal bitte hier den assert Befehl.

    Im Debug Modus funktioniert dies zwar, im Release Modus aber nicht, da der Ausdruck RegisterClass() nicht ausgewertet wird.



  • Öhm Funktioniert alles allerdings nur mit asset



  • Ohne assert wird das Fenster nicht angezeigt



  • Du sollst nicht die ganze Zeile löschen sondern ersetzen:

    RegisterClass(&wc);
    

    oder besser

    if (!RegisterClass(&wc)) {
        MessageBoxA(nullptr, "Failed to register window class!", "Error:", MB_OK);
        return 0;
    }
    


  • Okay danke schön jetzt funktioniert alles


Anmelden zum Antworten