ANI file auslesen



  • hallo, also ich will herrausfinden wie viele frames ein ani file hat (ani file = animierter cursor). ich benutze folgenden code:

    CStdioFile file;
    	CString compare;
    	tagANIHeader head;
    	char *id[4];
    	DWORD size;
    	DWORD tempsize;
    	if(file.Open("c:\\banana.ANI",CFile::modeRead|CFile::typeBinary))
    	{
    		file.Read(id,4);
    		compare.Format("%s",id);
    		if(compare.Find("RIFF",0)>-1)
    		{
    			file.Read(&size,sizeof(DWORD));
    			file.Read(id,4);
    			compare.Format("%s",id);
    			if(compare.Find("ACON",0)>-1)
    			{
    				file.Read(id,4);
    				//AfxMessageBox(id);
    				file.Read(&size,sizeof(DWORD));
    				compare.Format("%d",size);
    				AfxMessageBox(compare);
    				file.Read(&tempsize,size);
                    file.Read(id,4);
    				compare.Format("%s",id);
    				AfxMessageBox(compare);
    				if(compare.Find("anih",0)>-1)
    				{
    					file.Read(&head.cbSizeOf,sizeof(head.cbSizeOf));
    					file.Read(&head.cFrames,sizeof(head.cFrames));
    					CString test;
    					test.Format("%d",head.cFrames);
    					AfxMessageBox(test);
    					file.Close();
    				}
    			}
    		}
    		else
    			AfxMessageBox("Die angegebene Datei ist keine RIFF Datei");
    	}
    	else
    		AfxMessageBox("Konnte die angegebene Datei nicht finden");
    

    ich bekomme auch die erforderlichen informationen allerdings steigt mein programm danach mit der meldung:
    Run-Time Check Failure #2 - Stack around the variable 'tempsize' was corrupted.
    aus.
    Was willer von mir???
    Danke für die hilfe im voraus.



  • du hast einen programmierfehler gemacht. das will er dir damit sagen.



  • Danke das ist ja schon mal nen Anfang, damit hast du mir sehr geholfen. Nicht!!!!!!
    Ich bin ja wirklich kein guter Programmierer mag ich zugeben aber darauf bin ich schon gekommen. Danke! Hat vieleicht noch jemand anderes nen Hinweis für mich



  • xyz44 schrieb:

    file.Read(&tempsize,size);

    Du liest hier size Bytes an die Adresse von tempsize. Wenn size > sizeof(DWORD) ist, schreibst du über die Grenzen von tempsize hinaus.

    Das mit der id ist auch nicht so richtig. Erstens hast du da ein Array von 4 char-Zeigern, wo 4 char ausreichen würden. Zweitens benutzt du dieses (nicht nullterminierte) Array für CString::Format mit %s.

    P.S.: Dieses nachgestellte "Nicht" funktioniert eigentlich nur im Englischen. Oder redest du wirklich so?



  • Ja so ähnlich red ich wohl nur läßt sich sarkasmus in text nicht so gut ausdrücken 🙂

    Habe es inzwischen hinbekommen. Mit demchar *id[4] habe ich in char id[4] geändert is mir uch aufgefallen.

    Danke für deine Antwort.



  • Ja so ähnlich red ich wohl nur läßt sich sarkasmus in text nicht so gut ausdrücken 🙂

    Habe es inzwischen hinbekommen. Mit demchar *id[4] habe ich in char id[4] geändert is mir uch aufgefallen.

    Danke für deine Antwort.


Anmelden zum Antworten