En el debug me sale en call
FreeDeviceContexts, si le doy a ctr+F3 me va al boton que llama la función de codificación, pero no me aclara nada, o sea, en código va a:
Cita:
procedure TForm1.BtnDecodeClick(Sender: TObject);
begin
DesHabilitaTodo(Sender);
EditDest.Text:=ChangeFileExt(EditDest.Text, '.flac');// ruta destino + nombre fichero flac
DecodeFile(EditDest.Text, EditFileName.Text); // ruta destino.flac, ruta origen.wav
end;
|
DesHabilitaTodo no es el problema ya que lo he comentado y sigue saltando la excpeción. DecodeFile es la función que contiene el bucle cuyo código es:
Cita:
while (ok = 1) and (restan > 0) and (BtnDecode.Cancel = false)do
begin
Application.ProcessMessages;
if restan > READSIZE then
begin
necesarias := READSIZE
end
else
begin
necesarias := restan;
end;
progreso := progreso + necesarias;
if(progreso > BarraProgreso.Step) then
begin
BarraProgreso.StepIt;
end;
BlockRead(F_Origen, buffer, tmuestra, transferidas);
if necesarias<tmuestra then
begin
MessageDlg('Error al leer del fichero, las muestras leídas tienen tamaño menor que el tamaño de lectura por muestra', mtError, [mbOk], 0);
ok := 0;
restan := 0;
end
else if ok = 1 then
begin
for i:=0 to (necesarias*channels-1) do
begin
//trabajo ineficiente pero efectivo para sistemas little-endian o big-endian
pcm[i] := FLAC__int32(FLAC__int16(FLAC__int8(buffer[2*i+1]))) shl 8 or FLAC__int16(buffer[2*i]);
end;
//se alimenta el codificador
ok := FLAC__stream_encoder_process_interleaved(pencoder, pcm, necesarias);
end;
restan := restan - necesarias;//necesarias;
end;//while
|
Si comento la línea que llama a la función FLAC__stream_encoder_process_interleaved, entonces no salta la excepción.
Yo no sé a vosotros, pero yo debugeando con Delphi lo hago a nivel un poco básico y esto del ctrl+F3 y viendo la pila con esas instrucciones en ensamblador no me han aclarado casi nunca los problemas que he tenido...
![Roll Eyes (Sarcastic)](http://www.clubdelphi.com/foros/images/smilies/rolleyes.gif)