Граф фильтра

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

ALeu

Помогите. Надо созданный граф фильтра сохранить на диске. Ниже приведенный код на С делает это. Не могу написать реализацию этого на 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;
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab