我直接用的DSPACK下的那个AsyncEx的例子,未做任何修改,编译注册后用GraphEdit手动连接一切正常,但用代码来连接就不行了,以前从未接触过DSHOW,调试了两天,感觉非常困惑,望有经验的朋友帮忙看看到底是哪里的问题.非常感谢.测试的代码如下,SourceFilter直接用的Demo中的,未做修改:unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DirectShow9, ActiveX, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const CLSID_AsyncEx: TGUID = '{3E0FA044-926C-42D9-BA12-EF16E980913B}';
var
  Form1: TForm1;
  GraphID: Integer;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
  pGraphBuilder: IGraphBuilder;
  pFileStream: IBaseFilter;
  EnumPins: IEnumPins;
  OutPin: IPin;
  hr: HRESULT;
  pLoader: IFileSourceFilter;
  fetched: ULONG;
begin
  CoInitialize(nil);
  hr := CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IGraphBuilder, pGraphBuilder);  //用CLSID_AsyncReader结果正确,如果用CLSID_AsyncEx,则最后Render时会返回 0x8004025F的错误
  hr := CoCreateInstance(CLSID_AsyncEx, nil, CLSCTX_INPROC_SERVER, IID_IBaseFilter, pFileStream);  pGraphBuilder.AddFilter(pFileStream, 'SourceFilter');  pFileStream.QueryInterface(IID_IFileSourceFilter, pLoader);
  hr := pLoader.Load('C:\WINDOWS\clock.avi', nil);  EnumPins := nil;
  pFileStream.EnumPins(EnumPins);
  EnumPins.Reset;
  EnumPins.Next(1, OutPin, @fetched);
  EnumPins := nil;
  hr := pGraphBuilder.Render(OutPin); //此处不成功
  OutPin := nil;  IGraphBuilder := nil;
  IBaseFilter := nil;
  CoUninitialize();
end;
end.