ОБСУЖДЕНИЕ

Граф фильтра

2 ответов 5,7 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
Помогите. Надо созданный граф фильтра сохранить на диске. Ниже приведенный код на С делает это. Не могу написать реализацию этого на 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;
 
Зачем откомпиль в С например как DLL и юзай в Delphi, правда там тонкости есть поищи монуалы по использованию Delphi и С в одной программе. Есть человек который это уже делал: Ананьев Вова ICQ 256-448-076. Спроси у него.
 
Скачай компонент 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;
 
Статус
Закрыто для дальнейших ответов.