Hallo,
ich habe ein komisches problem mit dem DSPack. ich schreibe gerade einen kleinen MediaPlayer mithilfe des DSPacks.
Jetzt habe ich festgestellt, dass das Programm zwar auf meinem eigenen PC läuft, aber nicht auf anderen PCs, zumindest nicht, wo ich es getestet habe
Wenn ich eine DVD oder eine CD rendere, kommt bei CD folgender Fehler: "Name oder Objekt nicht gefunden" und bei DVD "Ungültige Gleitkommaoperation".
Und jetzt habe ich mein Projekt mal auf einem Rechner kompiliert, wo es nicht geht.
Der Fehler kommt irgendwo in diesem Abschnitt, ich habe es mit BreakPoint versucht, finde aber nicht die genaue Stelle.
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
var i: Integer;
Status : TAMDVDRenderStatus;
F: Integer;
sr: TSearchRec;
FileName: String;
begin
{DVD}
If FileExists(ExtractFileDrive(DriveComboBox1.Items.Strings[DriveComboBox1.ItemIndex]) + '/' + 'VIDEO_TS' + '/' + 'VIDEO_TS.IFO') then
begin
Form1.ListBox1.Enabled := False;
Form1.OpenDialog1.Filter := 'VIDEO_TS.IFO|VIDEO_TS.IFO';
Form1.ListBox1.Items.Add(ExtractFileDrive(DriveComboBox1.Items.Strings[DriveComboBox1.ItemIndex]) + '/' + 'VIDEO_TS' + '/' + 'VIDEO_TS.IFO');
If not Form1.FilterGraph1.Active = True then Form1.FilterGraph1.Active := True;
Form1.FilterGraph1.Mode := gmDVD;
Form1.VideoWindow1.Mode := vmNormal;
Form1.FilterGraph1.ClearGraph;
Form1.FilterGraph1.RenderDVD(Status, Form1.ListBox1.Items.Strings[0]);
Form1.FilterGraph1.Volume := Form1.TrackBar1.Position * 1000;
Form1.FilterGraph1.Play;
Form5.Close;
end;
{CD}
If not FileExists(ExtractFileDrive(DriveComboBox1.Items.Strings[DriveComboBox1.ItemIndex]) + '/' + 'VIDEO_TS' + '/' + 'VIDEO_TS.IFO') then
begin
Form1.ListBox1.Enabled := True;
Screen.Cursor := crHourGlass;
F := FindFirst(ExtractFileDrive(DriveComboBox1.Items.Strings[DriveComboBox1.ItemIndex]) + '/' + '*.*', (faAnyFile and not faDirectory), sr);
while F = 0 do
begin
if (sr.Attr and faDirectory) = 0 then
begin
FileName := sr.Name;
FileName := StringReplace(FileName, ExtractFileExt(FileName), '', []);
Form1.ListBox1.Items.Add(FileName);
end;
F := FindNext(sr);
end;
FindClose(sr);
Screen.Cursor := crDefault;
Form1.OpenDialog1.FileName := FileName;
for I := 0 to Form1.OpenDialog1.Files.Count - 1 do
begin
Form1.ListBox1.Items.Add(Form1.OpenDialog1.Files[i]);
end;
If not Form1.FilterGraph1.Active = True then Form1.FilterGraph1.Active := True;
Form1.FilterGraph1.Mode := gmNormal;
Form1.VideoWindow1.Mode := vmVMR;
Form1.FilterGraph1.ClearGraph;
Form1.FilterGraph1.RenderFile(Form1.OpenDialog1.FileName);
Form1.FilterGraph1.Volume := Form1.TrackBar1.Position * 1000;
Form1.FilterGraph1.Play;
Form5.Close;
end;
end;
Und wenn der Fehler kommt, steht der Compiler an folgender Stelle in der DSUtil.pas
Delphi-Quellcode:
function CheckDSError(HR: HRESULT): HRESULT;
var Excep: EDirectShowException;
begin
Result := HR;
if Failed(HR) then
begin
Excep := EDirectShowException.Create(format(GetErrorString(HR)+' ($%x).',[HR]));
Excep.ErrorCode := HR;
raise Excep;
end;
end;
Ich hoffe, ihr könnt mir helfen!
Paul