![]() |
DirectShow - Audioplayer mit Fehlermeldung
Liste der Anhänge anzeigen (Anzahl: 2)
Am Ende gibt es eine Fehlermeldung:
DirectShow_MP3.exe funktioniert nicht mehr. Wer findet den Fehler oder eine Lösung? Im Anhang ist die EXE und das MP3-File.
Delphi-Quellcode:
program DirectShow_MP3;
{$APPTYPE CONSOLE} uses DirectShow9, Windows, ActiveX; var pGraph : IGraphBuilder; pControl : IMediaControl; pEvent : IMediaEvent; hr : HRESULT; evCode : integer = 0; begin hr := CoInitialize(nil); if FAILED(hr) then begin Writeln('ERROR - Could not initialize COM library'); Halt(0); end; // Create the filter graph manager and query for interfaces. hr := CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, pGraph); if FAILED(hr) then begin Writeln('ERROR - Could not create the Filter Graph Manager.'); Halt(0); end; pGraph.QueryInterface(IID_IMediaControl, pControl); pGraph.QueryInterface(IID_IMediaEvent, pEvent); // IMPORTANT: Change this string to a file on your system. hr := pGraph.RenderFile('Alarm01.mp3', nil); // Build the graph if SUCCEEDED(hr) then begin hr := pControl.Run(); // Run the graph if SUCCEEDED(hr) then begin pEvent.WaitForCompletion(300000, evCode); // 5 Min wait for completion //pEvent.WaitForCompletion(INFINITE, evCode); // Note: Do not use INFINITE in a real application, because it // can block indefinitely. end; end; (* WRONG CODE pControl._Release(); pEvent._Release(); pGraph._Release(); CoUninitialize(); //WriteLn('Press Return'); //ReadLn; Halt(0); end. *) //CORRECTION pControl:=nil; pEvent:=nil; pGraph:=nil; CoUninitialize; end. |
AW: DirectShow - Audioplayer mit Fehlermeldung
Warum wird
![]() Warum werden Interfacereferenzen nicht mit nil freigegeben? Warum wurde keine Fehlerbehandlung in das Programm eingebaut? (SysUtils + Try-Except) Wie wäre es, wenn du den Programmcode in eine Prozedur auslagerst? (da würde dann die Speicherverwaltung alles ordentlich freigeben, vorallem wenn man keine globalen Variablen verwendet und erst Recht nicht in der DPR.) |
AW: DirectShow - Audioplayer mit Fehlermeldung
Danke!
Halt() war nur zum Testen, _Release hielt ich für eingebaute Funktionen von ActiveX. Geändert funktioniert es.
Delphi-Quellcode:
...
pControl:=nil; pEvent:=nil; pGraph:=nil; CoUninitialize; end. |
AW: DirectShow - Audioplayer mit Fehlermeldung
Zitat:
Warum das in Delphi so nicht gemacht wird (funktioniert) obwohl eigentlich von der API vorgeschrieben weis ich auch nicht. Davon ab bin ich auch schon über das Problem gestolpert. C++, C# geht.. Delphi macht da wieder ne Ausnahme. gruss |
AW: DirectShow - Audioplayer mit Fehlermeldung
Halt schießt nicht das Programm ab, sondern es entläd auch noch alle Units usw.
Beim Entladen des DPR-Codes, werden dort die Interface-Variablen runtergezählt, aber die Instanzen sind bereits weg ... *peng* Außerdem steht Halt nunmal eher für einen Fehlerabbruch, auf den Windows natürlich reagieren kann. > siehe System._Halt0, RunError usw. PS: entferne mal die mp3, starte das Programm ... *peng* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz