我在学习用dspack控件制作播放器,想让播放器连续播放的时候,用了在FilterGraph的onGraphComplete事件,可是一点运行就出现错误,说IBaseFilter没声明,无法编译,这要怎么解决?代码如下:
一个是按钮事件:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
filtergraph1.ClearGraph;
filtergraph1.RenderFile('1.dat');
filtergraph1.Play;
end;当加上FilterGraph的onGraphComplete事件后就出现问题了:
procedure TForm1.FilterGraph1GraphComplete(sender: TObject;
  Result: HRESULT; Renderer: IBaseFilter);
begin
 filtergraph1.ClearGraph;
filtergraph1.RenderFile('2.dat');
filtergraph1.Play;
end;问题就出现在
type
  TForm1 = class(TForm)
    FilterGraph1: TFilterGraph;
    VideoWindow1: TVideoWindow;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure FilterGraph1GraphComplete(sender: TObject; Result: HRESULT;
      Renderer: IBaseFilter);(就这一行)
错误提示是:
[Error]Unit1.pas(16):Undeclared identifier:"IBaseFilter"请朋友帮我看看怎么解决,谢谢。

解决方案 »

  1.   

    缺少IBaseFilter所在的单元文件,将单元名加入到 uses 中即可
      

  2.   

    你的意思是把IBaseFilter加入uses 中?
    我试了,不行啊。
      

  3.   

    把IBaseFilter所在的单元加入uses中
      

  4.   


    你的单元文件需要用到一些系统文件,它定义uses后面//你的单元名
    unit 
    //引用的单元
    uses
      windows,...//这里添加IBaseFilter所在的单元,在帮助里找出来
    //类名
    type
    ....
      

  5.   


    unit Unit1;interfaceuses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls,shlobj, ExtCtrls,FlatBars, FlatBtns, FlatUtils, FlatPanel;类似这样
    上面代码少了interface
    上面的单元楼主看看哪个不在,试着添加下,在里面某个单元里,因为是别的地方拷贝的,具体哪个我没验证
      

  6.   

    IBaseFilter是Directshow中所有Filter的基类.楼主是不是要弄个DIRECTSHOW SDK才能用?
    没用过DIRECTSHOW SDK,只提供参考
      

  7.   

    IBaseFilter 在DirectShow9.pas单元中
    你如果在找不到,去网上下载一个。这个是声明
      IBaseFilter = interface(IMediaFilter)
        ['{56A86895-0AD4-11CE-B03A-0020AF0BA770}']
        (*** IBaseFilter methods ***)
        function EnumPins(out ppEnum: IEnumPins): HResult; stdcall;
        function FindPin(Id: PWideChar; out ppPin: IPin): HResult; stdcall;
        function QueryFilterInfo(out pInfo: TFilterInfo): HResult; stdcall;
        function JoinFilterGraph(pGraph: IFilterGraph; pName: PWideChar): HResult; stdcall;
        function QueryVendorInfo(out pVendorInfo: PWideChar): HResult; stdcall;
      end;
      

  8.   

    谢谢大家的帮助,我原来是把DirectShow9放在
    implementation
    uses DirectShow9;
    {$R *.dfm}看了你们说的才知道要放在interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,StdCtrls, Buttons,DirectShow9 , DSPack, Menus, ExtCtrls, ComCtrls;
    这样就行了。谢谢大家,真的非常感谢大家的热心帮助。只是我的分不多,所以只能分点拉。