AVIs mit vfw.h erstellen
-
Hallo,
ich versuche jetzt schon seit einer Woche einen Fehler in meinem C++-Code zu finden, in dem ich einen Film vom Bildschirm aufnehmen und in einer avi-Datei speichern würde. Das alles versuche ich mit der avifil32.dll (vfw.h).
Meinen Fehler habe ich schon bis auf folgende Zeile schieben können (indem ich Messageboxen vor und nach den Befehl gestellt habe):
AVIStreamSetFormat(pstream,0,(LPVOID)&bi,bi.biSize);Mein Code:
#pragma comment(lib, "Vfw32.lib") #include <Windows.h> #include <time.h> #include <stdio.h> #include <vfw.h> struct BITs { byte* bits; }; int main(int args,char** arg) { //Variablen char* datei; int fehler=0,vidfps,sltime=1000; int screenw,screenh,screenx,screeny; HDC sourcedc,destdc; HBITMAP hbmp; clock_t timer; AVIFileInit(); //Parameter if (args<=6) return -1; datei=arg[1]; screenx=(int)arg[2]; screeny=(int)arg[3]; screenw=(int)arg[4]; screenh=(int)arg[5]; vidfps=(int)arg[6]; //Vorbereiten sltime/=vidfps; sourcedc=GetDC(0); destdc=CreateCompatibleDC(sourcedc); hbmp=CreateCompatibleBitmap(sourcedc,screenw,screenh); SelectObject(destdc,hbmp); PAVIFILE pfile; AVIFileOpen(&pfile,datei,0x00001000,0); AVISTREAMINFO asi; asi.fccType=1935960438; asi.fccHandler=1129730893; asi.dwScale=1; asi.dwRate=vidfps; asi.dwQuality=10000; asi.rcFrame.left=screenx; asi.rcFrame.top=screeny; asi.rcFrame.right=screenx+screenw; asi.rcFrame.bottom=screeny+screenh; PAVISTREAM pstream; AVIFileCreateStream(pfile,&pstream,&asi); int stride=((screenw*(32/8)+3)&(~3)); BITMAPINFOHEADER bi; bi.biSize=sizeof(bi);//40 bi.biWidth=screenw; bi.biHeight=screenh; bi.biPlanes=1; bi.biBitCount=24; bi.biSizeImage=stride*screenh; MessageBox(NULL,"Ja!","Klappt es bis hier?",MB_OK); AVIStreamSetFormat(pstream,0,(LPVOID)&bi,bi.biSize); MessageBox(NULL,"Nein!","Klappt es bis hier?",MB_OK); //Wird nicht mehr ausgeführt ...Ich bedanke mich für jede Hilfe im voraus!
EDIT:
Sorry, die beschreibung vergessen^^
Also es kommt bei der genannten Zeile ein Fehler wo steht:
Fenstertitel: Just-in-Time-Debugger von Visual Studio
Text: Unbehandelte Win32-Ausnahme in Recorder.exe[3280]Es est die Debuggerauswahl
Das Fenster kommt nur wenn man genug Parameter übergibt:
"avi.avi" 0 0 100 100 25
Datei.....X.Y..W...H..FPS
-
TheShadowAE schrieb:
Meinen Fehler habe ich schon bis auf folgende Zeile schieben können (indem ich Messageboxen vor und nach den Befehl gestellt habe):
AVIStreamSetFormat(pstream,0,(LPVOID)&bi,bi.biSize);So, und jetzt noch die BESCHREIBUNG des Fehlers, dann wäre es vollständig

-
Sorry hatte ich vergessen, oben noch hinzugefügt
-
TheShadowAE schrieb:
ich versuche jetzt schon seit einer Woche einen Fehler in meinem C++-Code zu finden, in dem ich einen Film vom Bildschirm aufnehmen und in einer avi-Datei speichern würde.
Falsches Forum, das ist C-Code mit WinAPI und hat daher eher wenig mit C++ zu tun.
Statt mit Messageboxen rumzumachen könntest du doch mal den Debugger anschmeißen und das bisschen Code durchsteppen, dann siehst du vielleicht wo es hakt. So findet man üblicherweise Fehler. Ich glaube eher nicht, dass das hier jemand für dich tun wird.
-
Das Problem ist leider, dass ich die Parameter nicht mit dem IDE machen kann und dann durchsteppen (jedenfalls hab ich es noch nicht gefunden)
EDIT:
Hab es mal mit durchswitchen gemacht (Code verändert statt Parameter), aber die eine Zeile ist nurmal nur eine Zeile, die Funktion ist in einer DLL
-
Selbstverständlich kann man Startparameter im Debugger angeben. Das muss irgendwo im Debugging-Menü stecken.
Zum Fehler: du könntest mal die Doku von der Funktion _genau_ lesen und im Debugger die Parameter auf Korrektheit prüfen. Du übergibst wohl irgendwas flahsces. Falls doch alles richtig ist, vielleicht nochmal im richtigen Forum fragen, um mehr Antworten zu bekommen. WinAPI ist nicht C++, dein Problem interessiert hier keinen.
-
Danke für die Hilfen, ich habe es jetzt richtiger(mein Absturzproblem ist weg).
Ich musste nochmal in den tiefen der ganzen Funktionen gucken, nicht sehr leicht das zu verstehen
-
Danke für die Hilfen, ich habe es jetzt richtiger(mein Absturzproblem ist weg).
Ich musste nochmal in den tiefen der ganzen Funktionen gucken, nicht sehr leicht das zu verstehenEDIT:
Warum ist der gleiche Text oben mit dem Namen 123456?