我直接用的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.
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.
解决方案 »
- show和showmadal
- Access violation at address 00561622 in module 出错附源码
- ehlib的过滤使用问题???
- 有关DLL的一个简单的问题(在线等)
- 如何写帮助文档啊?
- 用TAdodataset + tdbgrid处理,如何获得已DELETE,但没有POST的记录?
- fastreport 小写转大写金额,函数怎么调用?
- 值得关心的话题-如何在Delphi中对Visio编程,有无较好的例子、参考资料?
- 如何调试ISAPI程序,多层的ISAPI????
- Delphi class constructor 和 class destructor 在 BPL 中
- 用delphi写 阴历转阳历的函数
- 在网页上显示的问题
讲讲啊!!!