?
Hallo
ich habe mir die "mpglib" runtergeladen um damit MP3's zu decodieren.
Schon am ersten Beispiel hackts bei mir
der beispielcode:
#include <windows.h>
#include "mpglibdll.h"
HINSTANCE hmpglibdll;
INITMP3 InitMP3;
EXITMP3 ExitMP3;
DECODEMP3 decodeMP3;
char buf[16384];
struct mpstr mp;
int main (void)
{
int size;
char out[8192];
int len,ret;
hmpglibdll = LoadLibrary("mpglib.dll");
if (!hmpglibdll)
return (NO_DLL_FOUND);
InitMP3 = (INITMP3) GetProcAddress(hmpglibdll, TEXT_INITMP3);
ExitMP3 = (EXITMP3) GetProcAddress(hmpglibdll, TEXT_EXITMP3);
decodeMP3 = (DECODEMP3) GetProcAddress(hmpglibdll, TEXT_DECODEMP3);
InitMP3(&mp);
while( !eof() )
{
len = read(0,buf,16384);
if(len <= 0)
break;
ret = decodeMP3(&mp,buf,len,out,8192,&size);
while(ret == MP3_OK)
{
write(1,out,size);
ret = decodeMP3(&mp,NULL,0,out,8192,&size);
}
}
ExitMP3(&mp);
FreeLibrary(hmpglibdll);
return (0);
}
das wollte ich so umschreiben, dass es mit dateien statt der ein und ausgabe arbeitet
#include <windows.h>
#include "mpglibdll.h"
#include <stdio.h>
#include <fstream>
HINSTANCE hmpglibdll;
INITMP3 InitMP3;
EXITMP3 ExitMP3;
DECODEMP3 decodeMP3;
char buf[16384];
struct mpstr mp;
int main (void)
{
int size;
char out[8192];
int ret;
DWORD len;
hmpglibdll = LoadLibrary("mpglib.dll");
if (!hmpglibdll)
return (-1);
InitMP3 = (INITMP3) GetProcAddress(hmpglibdll, TEXT_INITMP3);
ExitMP3 = (EXITMP3) GetProcAddress(hmpglibdll, TEXT_EXITMP3);
decodeMP3 = (DECODEMP3) GetProcAddress(hmpglibdll, TEXT_DECODEMP3);
InitMP3(&mp);
std::fstream infile("E:\\input.mp3", std::ios::binary | std::ios::in);
std::fstream outfile("E:\\output.wav", std::ios::binary | std::ios::out);
while(!infile.eof())
{
len = 16384;
infile.read(buf, 16384);
ret = decodeMP3(&mp,buf,len,out,8192,&size);
while(ret == MP3_OK)
{
outfile.write(out, size);
ret = decodeMP3(&mp,NULL,0,out,8192,&size);
}
}
ExitMP3(&mp);
FreeLibrary(hmpglibdll);
return (0);
}
allerdings bricht die funktion ab und ich habe schrott in der datei...
was hab ich falsch gemacht?