線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2452
推到 Plurk!
推到 Facebook!

內存流播放器 access violation........

答題得分者是:pcplayer99
mygiazone
一般會員


發表:4
回覆:0
積分:0
註冊:2007-07-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-16 10:15:37 IP:122.127.xxx.xxx 訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-19 23:07:25 IP:121.35.xxx.xxx 訂閱
不好意思,没时间仔细读你的CODE。基本上,AV 错误的出现是因为你的代码访问了不存在的东西。比如一个 object 还没有被 create 你就去使用它。

所以,你要仔细检查你的 CODE,看看哪里发生了类似的事。你也可以在 CODE 里写 try ... except...end 这样的错误陷阱,把 AV 异常抓住,看它出现在CODE的哪一行。
系統時間:2024-04-26 19:44:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!