Compilerfehler C2664



  • Ich bin nicht so bewandert im Thema programmieren, dennoch wollte ich einmal etwas in cpp versuchen.
    Ich wollte mich dabei versuchen das Hintergrundbild meines Desktops zu ändern, allerdings wenn ich versuche das Programm zu starten, taucht eine Fehlermeldung auf: Fehler C2664 "BOOL SystemParametersInfoW(UINT,UINT,PVOID,UINT)" : Konvertierung von Argument 3 von "const char [63]" in "PVOID" nicht möglich

    Der Code

    #include <windows.h>
    #include <stdio.h>
    
    int WINAPI WinMain(HINSTANCE inst , HINSTANCE prev, LPSTR cmd, int show) {
    	while(1) {
    		if (GetAsyncKeyState(VK_NUMPAD0) & 0x8000) {
    			SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:/Users/LordGaming/OneDrive/Desktop/Neuer Ordner/thumb-1920-984559", SPIF_UPDATEINIFILE);
    		}
    	}
    }
    


  • @LordGaming

    Hi,

    so ein string-literal "abc" ist const, PVOID nicht.
    Mach mal sowas:

    char file[] = "abc";
    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, file);
    


  • @Jockelx

    Jetzt habe ich leider zwei neue Fehler beide treten in der gleichen Zeile auf.

    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, file);
    

    Die Fehler:
    Fehler aktiv E0165 Zu wenig Argumente im Funktionsaufruf.
    Fehler C2660 "SystemParametersInfoW": Funktion akzeptiert keine 3 Argumente


  • Mod

    Der Fehler ist zwar von Jockelx, aber die Meldung ist doch dermaßen eindeutig formuliert, was soll man da noch groß anderes zu sagen? Guck auf den Code, der den Fehler verursacht und vergleiche das mal mit dem, was du vor hast. Erklär' uns doch mal, was du denkst, wenn du die Fehlermeldung liest, den Code anguckst, und über das Problem nachdenkst. Woran hakt es?

    Oder programmierst du grundsätzlich durch Copy&Paste aus dem Internet? Das wäre ok für ganz bestimmte Vorhaben. Aber ist halt kein Programmieren und man kann dann halt keine Probleme lösen, wenn man das eigene "Geschriebene" selber nicht versteht. Da muss man sich dann entscheiden, ob man lieber Programmieren lernen möchte oder einmalig ein bestimmtes Vorhaben umsetzen möchte.



  • @SeppJ

    Einen Fehler konnte ich jetzt selber lösen, dennoch hilft es mir nicht wenn du mich bei einer frage ankackst.
    leider ist noch ein Fehler da, allerdings halte ich mich ran und versuche den Fehler zu beheben! Jedenfalls nicht vielen dank für deine Hilfe 🙂



  • @LordGaming sagte in Compilerfehler C2664:

    wenn du mich bei einer frage ankackst

    Naja, ich verstehe die Reaktion schon. Ich habe dir gesagt, was das Problem ist...das du als file nicht "abc" schreiben sollst und die richtige Anzahl an Parameter nimmst...davon bin ich mal ausgegangen, dass du das hinkriegst.

    @LordGaming sagte in Compilerfehler C2664:

    leider ist noch ein Fehler da

    Und zwar?



  • @Jockelx

    "SystemParametersInfoW": Funktion akzeptiert keine 3 Argumente

    und ich habe "abc" durch den dateipfad ersetzt, weil wie ich es mir dachte da der dateipfad hin muss



  • @LordGaming Meine Güte, das steht doch da! In deinem ersten Versuch hat die Funktion 4 Argumente. @Jockelx hat eines davon berichtigt und eines davon (SPIF_UPDATEINIFILE) versehentlich weggelassen. Somit sind es jetzt noch 3, was aber von der Funktion nicht akzeptiert wird. Füge das 4. Argument also wieder hinzu. Oder was sonst willst du sonst unter der Fehlermeldung "Zu wenig Argumente im Funktionsaufruf." verstehen?



  • @wob guckmal was ich geschrieben habe dann wirst du bemerken dass ich das gemacht habe



  • aber das ist das erste und letzte mal dass ich hier eine frage stelle... ich hebe in meiner frage hervor dass ich nicht so gut in cpp bin (und learning by doing mache), dennoch werde ich dauern von Leuten angemault, wie ich dinge nicht verstehen kann und es doch so einfach wäre. Keiner hat lust von einer so toxischen community behandelt zu werden wenn man eine normale frage stellt!



  • Warum überhaupt in einer Endlosschleife, warum nur, wenn eine bestimmte Taste gedrückt wird?
    Ich kann ja durchaus verstehen, dass man am Anfang ein wenig rumspielt, aber Programme wie dieses muss man im Taskmanager abschießen oder selber mit TerminateProcess beenden.
    Das ist eigentlich eine gute Gelegenheit, sich näher mit den Kommandozeilenparametern zu beschäftigen. Das Programm bekommt einen Dateipfad als Argument und setzt dann dieses Hintergrundbild. Anschließend könntest du mehrere Verknüpfungen mit verschiedenen Parametern erstellen und je nach Lust und Laune diese ausführen.

    Und bei deinem Programm hast du ein Problem mit chars und TCHARs, die bei Unicode-Kompilierung wchar_ts sind. Eine Möglichkeit wäre, weiterhin mit char zu arbeiten und dann SystemParametersInfoA aufzurufen.


Log in to reply