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);

Кто что подскажет?
Re: DirectShow TransForm Filter и Delphi
От: Hacker_Delphi Россия  
Дата: 08.12.03 18:34
Оценка:
Здравствуйте, ZZTopper, Вы писали:

ZZT>это — в имплементэйшне.

ZZT>
ZZT>function TDForm.AddFilterByCLSID(pGraph: IGraphBuilder;
ZZT>    GUID: TGUID; wszName: PWideChar; out ppF: IBaseFilter): HRESULT;
ZZT>var
ZZT>    pF              : IBaseFilter;
ZZT>    hr              : Hresult;
ZZT>begin
ZZT>    ppF := nil;
ZZT>    pf := nil;
ZZT>    hr := CoCreateInstance(GUID, nil, CLSCTX_INPROC_SERVER, IID_IBaseFilter,
ZZT>        pF);
// Вот тут ты не прав... а кто за тебе регистрировать его будет???
// И имплементировать?
ZZT>    if (SUCCEEDED(hr)) then
ZZT>        begin
ZZT>            hr := pGraph.AddFilter(pF, wszName);
ZZT>            if (SUCCEEDED(hr)) then
ZZT>                ppF := pF
ZZT>            else
ZZT>                pF._Release();
ZZT>        end;
ZZT>    Result := hr;
ZZT>end;
ZZT>

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

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

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

ZZT>Кто что подскажет?
... << RSDN@Home 1.1.2 beta 2 >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[2]: DirectShow TransForm Filter
От: ZZTopper  
Дата: 08.12.03 19:22
Оценка:
Здравствуйте, Hacker_Delphi.

Вы писали 8 декабря 2003 г., 21:34:35:
H> // Вот тут ты не прав... а кто за тебе регистрировать его будет???
H> // И имплементировать?
Сорри, видимо нервы предыдущих дней сказываются.
Фильтр написан на Си (см п.1), скомпилён и зарегистрирован в системе

.
Posted via RSDN NNTP Server 1.8 beta
Re: DirectShow TransForm Filter
От: ZZTopper  
Дата: 08.12.03 20:39
Оценка:
Здравствуйте, ZZTopper.


Всем спасибо, вопрос снят.


--
С уважением,
ZZTopper mailto:Coder@mimex.ru
Posted via RSDN NNTP Server 1.8 beta
Re[3]: DirectShow TransForm Filter
От: Hacker_Delphi Россия  
Дата: 09.12.03 08:57
Оценка:
Здравствуйте, ZZTopper, Вы писали:

ZZT>Здравствуйте, Hacker_Delphi.


ZZT>Вы писали 8 декабря 2003 г., 21:34:35:

H>> // Вот тут ты не прав... а кто за тебе регистрировать его будет???
H>> // И имплементировать?
ZZT>Сорри, видимо нервы предыдущих дней сказываются.
ZZT>Фильтр написан на Си (см п.1), скомпилён и зарегистрирован в системе

Ага... а зачем руками тогда описывать интерфейс? может проще сделать Import Type Library?
... << RSDN@Home 1.1.2 beta 2 >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.