DirectShow TransForm Filter и Delphi
От: ZZTopper  
Дата: 08.12.03 16:42
Оценка:
Проблема в следующем:
1. Есть трансформ-фильтр DirectShow, написанный на C++.
2. Есть его исходники (соответственно, GUID'ы и описания методов)
3. Не могу реализовать на Дельфи...

Это — в interface.
type
 TFilterSettings = record
   a,b,c,d: integer;
end;
 IVDiagFilter = interface(IBaseFilter)
        ['{D2648482-7B11-494d-BAB1-F7140F16ECDF}']
        function GetParams(out Ef: integer; out Params: TFilterSettings): HRESULT; stdcall;  // the media type selected
        function SetParams(Ef: Integer; Params: TFilterSettings): HRESULT; stdcall;  // the media type selected
    end;


var 
  VDG: IBaseFilter;


это — в имплементэйшне.
function TDForm.AddFilterByCLSID(pGraph: IGraphBuilder;
    GUID: TGUID; wszName: PWideChar; out ppF: IBaseFilter): HRESULT;
var
    pF              : IBaseFilter;
    hr              : Hresult;
begin
    ppF := nil;
    pf := nil;
    hr := CoCreateInstance(GUID, nil, CLSCTX_INPROC_SERVER, IID_IBaseFilter,
        pF);
    if (SUCCEEDED(hr)) then
        begin
            hr := pGraph.AddFilter(pF, wszName);
            if (SUCCEEDED(hr)) then
                ppF := pF
            else
                pF._Release();
        end;
    Result := hr;
end;

И вот как я создаю обьект и вызываю его

    AddFilterByCLSID((G as IGraphBuilder), CLSID_MyFilter,   'VDiag Filter', VDG);

Но как только такой вызов — получаю AccessViolation в ntdll.dll
(VDG as IVDiagFilter).SetParams(1013,RGB);

Кто что подскажет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.