Ein haufen Fehlermeldungen aus dem Nichts



  • Hallo,
    Ich errinere mich nicht was ich verändert habe (um ehrlich zu sein glaube ich dass ich seit meiner letzten Kompilierung nichts verändert habe, aber kann ja nicht) aber plötzlich bekomme ich einen Haufen für mich unverständlicher Fehlermeldungen beim Kompilieren bei Dingen die bisher immer funktioniert haben.

    Hier ein Auszug aus den Fehlermeldungen:

    gen_empty.c(94) : warning C4047: '=': Anzahl der Dereferenzierungen bei 'int ' und 'LRESULT' unterschiedlich
    gen_empty.c(95) : error C2296: '
    ': Ungültig, da der linke Operand vom Typ 'int *' ist
    gen_empty.c(95) : error C2198: "malloc": Nicht genügend Argumente für Aufruf.

    Und hier der dazugehörige Code:

    [90]	int i;
    [91]	char **playlist; 
    [92]	char *tmp;
    [93]
    [94]	list_length = SendMessage(plugin.hwndParent,WM_WA_IPC,0,IPC_GETLISTLENGTH);
    [95]	playlist = malloc(list_length*sizeof(char*));
    

    Den Code bis zur den Zeilen oben:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <time.h>
    #include <string.h>
    #include <float.h>
    #include <math.h>
    
    #include <winsock.h>
    #include <io.h>
    
    #pragma comment(lib, "wsock32.lib")
    
    #include <windows.h>
    
    #include "./winamp/GEN.H"
    #include "./winamp/wa_ipc.h"
    #include "./winamp/wa_hotkeys.h"
    
    #define SERVER_PORT 1234
    #define CLIENT_PORT 1235
    #define RCVCOMMSIZE 265
    #define MTU 1024
    
    #define PSP_VOLUMEPAN_WIDTH 53
    
    WNDPROC lpWndProcOld;
    extern WNDPROC lpWndProcOld;
    
    int init(void); 
    void config(void); 
    void quit(void);
    
    LRESULT CALLBACK MWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
    
    HANDLE hpspwAMPthread;
    DWORD  dwpspwAMPthreadid;
    int lsmf;
    int bConnectedToPSP;
    SOCKET client_sock;
    
    // For sending stuff to the PSP
    char tmp[512];
    char *tmp2;
    char send_buffer[1024];			// Temporary
    int send_buffer_l;				// Temporary
    
    // Track and send recent volume to PSP
    int recentVolume, pspVolumeDecPointPos, pspVolumeDecPointSign;
    double recentPspVolume, oldPspVolume=-1; // Kinda hacky, -1 is for that winamp initially sends the volume to the PSP
    
    // Playlist-changes
    long last_playlist_change=0;
    char **oldlist, **newlist;
    int *addlist, *movelist, *removelist;
    int oldlist_length, newlist_length;
    
    // Fileinfo
    /*
    char retbuf[MAX_PATH];
    //ZeroMemory(retbuf, MAX_PATH);
    extendedFileInfoStruct efi;
    efi.retlen = sizeof(retbuf);
    efi.ret = retbuf;
    */
    
    char cwParam[32];				// Tempo-
    char clParam[32];				// rary
    
    long bench_start, bench_stop, bench_delta;	// Temporary for - guess what - benchmarking.
    
    winampGeneralPurposePlugin plugin = {
      GPPHDR_VER,
      "pspwAMP server v.0001", // Plug-in description 
      init,
      config, 
      quit,
    };
    
    double round(double d)
    {
    	return floor(d + 0.5);
    }
    
    char **get_playlist(int *list_length)		// Yeah, it's ugly, but I will always need playlist + playlist-length...
    {
    	int i;
    	char **playlist; 
    	char *tmp;
    
    	list_length = SendMessage(plugin.hwndParent,WM_WA_IPC,0,IPC_GETLISTLENGTH);	// Gibt einen INT zurück
    	playlist = malloc(list_length*sizeof(char*));
    
    	for(i=0;i<list_length;i++)
    	{
    		tmp = SendMessage(plugin.hwndParent,WM_WA_IPC,i,IPC_GETPLAYLISTFILE);	// Gibt einen Dateipfad als *char zurück
    		playlist[i] = malloc((strlen(tmp)+1));
    		strcpy(playlist[i], tmp);
    	}
    
    	return playlist;
    }
    

    Echt keine Ahnung woran's liegt oder was ich hier Relevantes posten könnte...



  • Wenn ich die Zeilen 62-66 entkommentiere bekomme ich weitere (für mich) unverständliche Fehlermeldungen:

    gen_empty.c(65) : error C2143: Syntaxfehler: Es fehlt '{' vor '.'
    gen_empty.c(65) : error C2059: Syntaxfehler: '.'
    gen_empty.c(66) : error C2143: Syntaxfehler: Es fehlt '{' vor '.'
    gen_empty.c(66) : error C2059: Syntaxfehler: '.'

    😕



  • Die Anweisungen müssen in eine Funktion rein:

    int func(void)
    {
      /* hier her */
    }
    


  • Dein list_length scheint irgendwo als Integer-Zeiger deklariert zu sein.
    Also so: int* list_length.

    SendMessage liefert LRESULT als Rückgabe. LRESULT ist in Windef.h so
    deklariert: typedef LONG LRESULT;

    Gruß,
    p.



  • Wenn du dir allerdings sicher bist, das dein SendMessage einen Zeiger auf Int liefert, dann müsste das auch mit einem Type-Cast klappen:
    (int*) SendMessage(plugin.hwndParent,WM_WA_IPC,0,IPC_GETLISTLENGTH);

    Und wenn an der Adresse dieses Zeigers die Größe deiner Playlist in Byte steht, dann müsste das Reservieren vom Speicher so funktionieren:
    playlist = malloc( *list_length * sizeof(char*) );

    Allderdings was mir nicht klar ist, wieso deklarierst du
    char** playlist;
    forderst aber
    sizeof(char*) an ?

    Gruß,
    p.



  • proggingmania schrieb:

    Dein list_length scheint irgendwo als Integer-Zeiger deklariert zu sein.
    Also so: int* list_length.

    SendMessage liefert LRESULT als Rückgabe. LRESULT ist in Windef.h so
    deklariert: typedef LONG LRESULT;

    Gruß,
    p.

    Ja richtig, ist der Parameter der Funtion

    proggingmania schrieb:

    Wenn du dir allerdings sicher bist, das dein SendMessage einen Zeiger auf Int liefert, dann müsste das auch mit einem Type-Cast klappen:
    (int*) SendMessage(plugin.hwndParent,WM_WA_IPC,0,IPC_GETLISTLENGTH);

    Ist wohl nicht so. Ich habe das wohl geändert und danach nicht kompiliert (war vor einer Woche, kann sein dass meine Errinerung mich da täuscht). Ohne es, funktionierts :p.

    Danke erst mal. Was ich aber immer noch nicht verstehe sind folgende Fehlermeldungen

    gen_empty.c(64) : error C2143: Syntaxfehler: Es fehlt '{' vor '.'
    gen_empty.c(64) : error C2059: Syntaxfehler: '.'
    gen_empty.c(65) : error C2143: Syntaxfehler: Es fehlt '{' vor '.'
    gen_empty.c(65) : error C2059: Syntaxfehler: '.'

    Für die Zeilen

    [63]	extendedFileInfoStruct efi;
    [64]	efi.retlen = sizeof(retbuf);
    [65]	efi.ret = retbuf;
    

    Wobei extendedFileInfoStruct als

    typedef struct {
      char *filename;
      char *metadata;
      char *ret;
      int retlen;
    } extendedFileInfoStruct;
    

    deklariert ist.



  • Siehe keksekekse :
    Zeile 64 + 65 dürfen nicht ausserhalb einer Funktion sein.



  • Boah. Hab ich vercheckt. Danke 🙂


Anmelden zum Antworten