Проблема в следующем:
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);
Кто что подскажет?
Здравствуйте, 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 >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, Hacker_Delphi.
Вы писали 8 декабря 2003 г., 21:34:35:
H> // Вот тут ты не прав... а кто за тебе регистрировать его будет???
H> // И имплементировать?
Сорри, видимо нервы предыдущих дней сказываются.
Фильтр написан на Си (см п.1), скомпилён и зарегистрирован в системе
.
Posted via RSDN NNTP Server 1.8 beta
Здравствуйте, ZZTopper.
Всем спасибо, вопрос снят.
--
С уважением,
ZZTopper
mailto:Coder@mimex.ruPosted via RSDN NNTP Server 1.8 beta
Здравствуйте, 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 >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))