Граф фильтра

  • Автор темы ALeu
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

ALeu

Гость
#1
Помогите. Надо созданный граф фильтра сохранить на диске. Ниже приведенный код на С делает это. Не могу написать реализацию этого на Delphi.


Код:
HRESULT SaveGraphFile(IGraphBuilder *pGraph, WCHAR *wszPath) 
{
 const WCHAR wszStreamName[] = L"ActiveMovieGraph"; 
 HRESULT hr;
 IStorage *pStorage = NULL;

 hr = StgCreateDocfile( wszPath,     
    STGM_CREATE │ STGM_TRANSACTED │ STGM_READWRITE │STGM_SHARE_EXCLUSIVE    0, &pStorage);
  if(FAILED(hr)) 
 {
   return hr;
 }
 // Next, create a stream to store.
 IStream *pStream;
 hr = pStorage->CreateStream( wszStreamName,
    STGM_WRITE │ STGM_CREATE │ STGM_SHARE_EXCLUSIVE,0, 0,&pStream);
 if (FAILED(hr)) 
 {
   pStorage->Release();  
   return hr;
 }
 // The IpersistStream::Save method converts a stream
 // into a persistent object.
 IPersistStream *pPersist = NULL;
 pGraph->QueryInterface(IID_IPersistStream,reinterpret_cast<void**>(&pPersist));
 hr = pPersist->Save(pStream, TRUE);
 pStream->Release();
 pPersist->Release();
 if (SUCCEEDED(hr)) 
 {
 hr = pStorage->Commit(STGC_DEFAULT);
 }
 pStorage->Release();
 return hr;
 
G

gozer

Гость
#2
Зачем откомпиль в С например как DLL и юзай в Delphi, правда там тонкости есть поищи монуалы по использованию Delphi и С в одной программе. Есть человек который это уже делал: Ананьев Вова ICQ 256-448-076. Спроси у него.
 
Z

zubr

Гость
#3
Скачай компонент DSPACK234, вот код из него:
Код:
function SaveGraphFile(pGraph: IGraphBuilder; wszPath: WideString): HRESULT;
var
Storage: IStorage;
Stream: IStream;
Persist: IPersistStream;
begin
Result := StgCreateDocfile(
PWideChar(wszPath),
STGM_CREATE or STGM_TRANSACTED or STGM_READWRITE or STGM_SHARE_EXCLUSIVE,
0, Storage);
if FAILED(Result) then Exit;

Result := Storage.CreateStream(
PWideChar(wszStreamName),
STGM_WRITE or STGM_CREATE or STGM_SHARE_EXCLUSIVE,
0, 0, Stream);
if FAILED(Result) then Exit;

pGraph.QueryInterface(IID_IPersistStream, Persist);
Result := Persist.Save(Stream, True);
Stream := nil;
Persist := nil;
if SUCCEEDED(Result) then Result := Storage.Commit(STGC_DEFAULT);
Storage := nil;
end;
 
Статус
Закрыто для дальнейших ответов.