Сохранить граф в файл(Delphi)

 
Начать новую тему   Ответить на тему    Список форумов DirectShow форум -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
Tors
Активный


Зарегистрирован: 16.11.2006
Сообщения: 25
Откуда: Харьков

СообщениеДобавлено: Пт Ноя 17, 2006 3:57 pm    Заголовок сообщения: Сохранить граф в файл(Delphi) Ответить с цитатой

Не получается корректно сохранить граф в файл из приложения на делфи,
при открытии полученного файла в графэдите пишет
не могу сконструировать граф из этого файла :

procedure TAudioConverter.SaveGraphToFile(FileName:PWideChar);
var
wszStreamName:PWideChar;
pStorage:IStorage;
hr:HRESULT;
pStream:IStream;
pPersist:IPersistStream;
wszPath:PWideChar;
begin
wszStreamName:='AudioConverterGraph';
wszPath:=FileName;
hr:=StgCreateDocfile(wszPath,STGM_CREATE or STGM_TRANSACTED or STGM_READWRITE or STGM_SHARE_EXCLUSIVE, 0, pStorage);
if FAILED(hr) then
begin
end;
hr:=pStorage.CreateStream(wszStreamName,STGM_WRITE or STGM_CREATE or STGM_SHARE_EXCLUSIVE, 0, 0,pStream);
if FAILED(hr) then
begin
end;
hr:=GraphBuilder.QueryInterface(IID_IPersistStream, pPersist);
if FAILED(hr) then
begin
hr:=999;
end;
hr:=pPersist.Save(pStream, TRUE);
//pStream._Release;
//pPersist._Release;
if SUCCEEDED(hr) then
begin
hr:=pStorage.Commit(STGC_DEFAULT);
if FAILED(hr) then
begin
end;
end;
//pStorage._Release();
end;


на билдере подобный код работает нормально
в чем грабли?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
WondeRu
Главвред :)


Зарегистрирован: 30.10.2006
Сообщения: 199
Откуда: Самара

СообщениеДобавлено: Вт Ноя 21, 2006 1:08 pm    Заголовок сообщения: Ответить с цитатой

Попробуй так:
Код:
function saveGRF(fichier:widestring;fg:IFilterGraph):Boolean;

var  hr:Hresult;

      pStorage:IStorage;

      pStream:IStream;

      pPersist:IPersistStream;

begin

result:=false;

try

try

hr:= StgCreateDocfile(pwidechar(fichier),STGM_CREATE or STGM_TRANSACTED or STGM_READWRITE or STGM_SHARE_EXCLUSIVE,0, pStorage);

if FAILED(hr) then exit;

hr:= pStorage.CreateStream('ActiveMovieGraph',STGM_WRITE or STGM_CREATE or STGM_SHARE_EXCLUSIVE,0, 0, pStream);

if FAILED(hr) then exit;

fg.QueryInterface(IPersistStream,pPersist);

hr:= pPersist.Save(pStream, TRUE);

if FAILED(hr) then exit;

pStorage.Commit(STGC_DEFAULT);

if FAILED(hr) then exit;

result:=true;

except

end;

finally

      pStorage:=nil;

      pStream:=nil;

      pPersist:=nil;

end;

end;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
WondeRu
Главвред :)


Зарегистрирован: 30.10.2006
Сообщения: 199
Откуда: Самара

СообщениеДобавлено: Вт Ноя 21, 2006 1:10 pm    Заголовок сообщения: Ответить с цитатой

Ну и в догонку загрузка графа из grf:

Код:

      function loadGRF(fichier:widestring;fg:TFiltergraph):Boolean;

      var  hr:HResult;

            pStorage:IStorage;

            pPersist:IPersiststream;

            pStream:IStream;

      begin

      result:=false;

      try

      try

      if StgIsStorageFile(pwidechar(fichier))<>S_Ok then exit;

      hr:= StgOpenStorage(pwidechar(fichier), nil, STGM_TRANSACTED or STGM_READ or STGM_SHARE_DENY_WRITE,0, 0, pStorage);

      if FAILED(hr) then exit;

      hr:=fg.QueryInterface(IPersistStream,pPersist);

      if FAILED(hr) then exit;

      hr:= pStorage.OpenStream('ActiveMovieGraph', 0, STGM_READ or STGM_SHARE_EXCLUSIVE, 0, pStream);

      if FAILED(hr) then exit;

      hr:= pPersist.Load(pStream);

      if FAILED(hr) then exit;

      result:=true;

      except

      end;

      finally

            pStorage:=nil;

            pStream:=nil;

            pPersist:=nil;

      end;

      end;


Источник: http://paul.glagla.free.fr/d8.htm
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов DirectShow форум -> Общий Часовой пояс: GMT + 4
Страница 1 из 1
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB


Рейтинг@Mail.ru