內存流播放器 access violation........ |
答題得分者是:pcplayer99
|
mygiazone
一般會員 發表:4 回覆:0 積分:0 註冊:2007-07-12 發送簡訊給我 |
compiple的時候可以通過,但是一執行時就會出現 Error:Access violation at address 00000000. Read of address 00000000
我也試著找出問題,但是剛接觸delphi就是看沒有@@@" 能不能請懂程式的高手幫我看一下 謝謝! type TForm1 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private procedure NilAll(); public end; IStreamLoad = interface(IUnknown) ['{3E0FA056-926C-43d9-BA18-EF16E980913B}']
function LoadFromStream(f_Stream: TStream) : HRESULT ; stdcall ; end; var
Form1: TForm1; g_GraphBuilder : IGraphBuilder = NIL; g_MediaControl : IMediaControl = NIL; g_DSPlayerFileSource : IBaseFilter = NIL; g_StreamSource : IStreamLoad = NIL; g_Pin : IPin = NIL; g_count : integer = 0; g_FileStream : TFileStream = NIL; const
CLSID_DSPlayerAsyncSource : TGUID = '{3E0FA044-926C-42d9-BA12-EF16E980913B}'; IID_IStreamLoad : TGUID = '{3E0FA056-926C-43d9-BA18-EF16E980913B}'; pinID = 'StreamOut'; implementation {$R *.dfm}
procedure TForm1.NilAll();
begin if Assigned(g_MediaControl) then CheckDSError(g_MediaControl.Stop); if Assigned(g_Pin) then g_Pin := nil; if Assigned(g_StreamSource) then g_StreamSource := nil; if Assigned(g_DSPlayerFileSource) then g_DSPlayerFileSource := nil; if Assigned(g_MediaControl) then g_MediaControl := nil; if Assigned(g_GraphBuilder) then g_GraphBuilder := nil; end; procedure TForm1.Button1Click(Sender: TObject);
begin if not OpenDialog1.Execute then exit; NilAll; CheckDSError(CoCreateInstance(TGUID(CLSID_FilterGraph), NIL, CLSCTX_INPROC, TGUID(IID_IGraphBuilder), g_GraphBuilder)) ; CheckDSError(g_GraphBuilder.QueryInterface(IID_IMediaControl, g_MediaControl)); CheckDSError(CoCreateInstance(CLSID_DSPlayerAsyncSource,NIL, CLSCTX_INPROC, IID_IBaseFilter, g_DSPlayerFileSource)); CheckDSError(g_DSPlayerFileSource.QueryInterface(IID_IStreamLoad, g_StreamSource)); if g_FileStream <> nil then g_FileStream.Free; g_FileStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead); CheckDSError(g_StreamSource.LoadFromStream(g_FileStream)); CheckDSError(g_DSPlayerFileSource.FindPin(pinID, g_Pin)); CheckDSError(g_GraphBuilder.AddFilter(g_DSPlayerFileSource, StringToOleStr('DSPlayer Async FileSource'))); CheckDSError(g_GraphBuilder.Render(g_Pin)); CheckDSError(g_MediaControl.Run); if g_count = 0 then begin g_count := g_count 1; CheckDSError(dsutil.ShowFilterPropertyPage(0,g_DSPlayerFileSource)); end; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin NilAll; end; procedure TForm1.Button2Click(Sender: TObject);
begin if Assigned(g_MediaControl) then CheckDSError(g_MediaControl.Run); end; procedure TForm1.Button3Click(Sender: TObject);
begin if Assigned(g_MediaControl) then CheckDSError(g_MediaControl.Pause); end; procedure TForm1.Button4Click(Sender: TObject);
begin if Assigned(g_MediaControl) then CheckDSError(g_MediaControl.Stop); end; procedure TForm1.Button5Click(Sender: TObject);
begin CheckDSError(dsutil.ShowFilterPropertyPage(0,g_DSPlayerFileSource)); end; end.
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |