Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание потоков IStream 
V
    Опции темы
RastaDja
Дата 9.11.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 1
Всего: 5



Здраствуйте! помогите разобратся с IStream, в частности как именно создать поток, и выделить под него память.
есть такой код
Код

CComPtr<IPersistStream> spPersistS;
    hr = pDisp->QueryInterface(IID_IPersistStream, (void**)&spPersistS);
    if (SUCCEEDED(hr))
    {
              IStream* pStream; //<-
              BOOL fDirty = TRUE;
              spPersistS->Save(pStream, fDirty))  //<-
        }
}

в pStream чочу получить данные, но не могу.


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Alexeis
Дата 9.11.2010, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



RastaDja, судя по spPersistS->Save(pStream, fDirty)) . IPersistStream ожидает получить на входе объект реализующий IStream . Он сам его не реализует и не создает объект реализующий IStream .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RastaDja
Дата 9.11.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 1
Всего: 5



Цитата

RastaDja, судя по spPersistS->Save(pStream, fDirty)) . IPersistStream ожидает получить на входе объект реализующий IStream . Он сам его не реализует и не создает объект реализующий IStream . 


мне кажется pPersistS->Save(pStream, fDirty)) должен вернуть поток в pStream. тут код работает нормально(наверное), а вот когда я хочу этот поток прочитать
Код

CComBSTR srty;
srty.ReadFromStream(pStream);

прога вылетает


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
xvr
Дата 9.11.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(RastaDja @  9.11.2010,  14:09 Найти цитируемый пост)
мне кажется pPersistS->Save(pStream, fDirty)) должен вернуть поток в pStream.
Каким образом? Он получает pStream by-value, и вернуть в него принципиально ничего не может. Так что pStream надо все же предварительно создать. 
Смотри CreateStreamOnHGlobal, ATL Stream Helpers

PM MAIL   Вверх
RastaDja
Дата 9.11.2010, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 1
Всего: 5



ну а как получить Поток имея указатель на IPersistStream?

мне надо этот поток в строку преобразовать. Подскажите пожалуйста smile 


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
xvr
Дата 9.11.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(RastaDja @  9.11.2010,  14:39 Найти цитируемый пост)
ну а как получить Поток имея указатель на IPersistStream?
Никак. Надо этот поток создать самому и передать в IPersisStream::Save - он запишет в этот поток свое содержимое.

Цитата(RastaDja @  9.11.2010,  14:39 Найти цитируемый пост)
мне надо этот поток в строку преобразовать.

Потом прочесть этот поток (с начала), и сделать его HEX dump (например)


Это сообщение отредактировал(а) xvr - 9.11.2010, 14:48
PM MAIL   Вверх
RastaDja
Дата 9.11.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 1
Всего: 5



ну это я и хочу узнаьб, как мне создать поток, а главное как и сколько памяти на него надо выделить?


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Alexeis
Дата 9.11.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



Цитата(RastaDja @  9.11.2010,  15:39 Найти цитируемый пост)
ну а как получить Поток имея указатель на IPersistStream?

  Его никак не получить, нужно свою реализацию IStream написать и передать указатель на уже созданный объект.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RastaDja
Дата 9.11.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 1
Всего: 5



Цитата

узнаьб

узнать


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Alexeis
Дата 9.11.2010, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



Цитата(RastaDja @  9.11.2010,  15:53 Найти цитируемый пост)
а главное как и сколько памяти на него надо выделить? 

  Заранее это неизвестно. Память придется выделять в реализации метода Write. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RastaDja
Дата 9.11.2010, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 1
Всего: 5



а можна пример для такого кода
Код

IDispatch* pDisp = m_varMap[CComBSTR(it->first)].pdispVal;//получаем на обект ссылку из коллекции
CComPtr<IPersistStream> spPersistS;
hr = pDisp->QueryInterface(IID_IPersistStream, (void**)&spPersistS);//получаем PersistStream обьекта
if (SUCCEEDED(hr))
{
       IStream* pStream;  //сколько сюда памяти выделить и как правельно создать IStream
       spPersistS->Save(pStream, TRUE);
}



--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
RastaDja
Дата 9.11.2010, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 1
Всего: 5



ну подскажите плз, ато уже запарился 2 дня сижу - не могу разобратся


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
xvr
Дата 9.11.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(RastaDja @  9.11.2010,  15:01 Найти цитируемый пост)
а можна пример для такого кода

Можно
Код

IDispatch* pDisp = m_varMap[CComBSTR(it->first)].pdispVal;//получаем на обект ссылку из коллекции
CComPtr<IPersistStream> spPersistS;
hr = pDisp->QueryInterface(IID_IPersistStream, (void**)&spPersistS);//получаем PersistStream обьекта
if (SUCCEEDED(hr))
{
       CComPtr<IStream> pStream;  //сколько сюда памяти выделить и как правельно создать IStream

  CreateStreamOnHGlobal(NULL,TRUE,&pStream);

       spPersistS->Save(pStream, TRUE);

  pStream->Seek(0,STREAM_SEEK_SET,NULL);
  unsigned char b;
  while(pStream->Read(&b,1,NULL)==S_OK)
   {
     cout<<hex<<b;
   }
}



Это сообщение отредактировал(а) xvr - 9.11.2010, 15:46
PM MAIL   Вверх
RastaDja
Дата 9.11.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 1
Всего: 5



спс, но програ вылетает на
Код

LARGE_INTEGER ld = {0,0,0,0};
pStream->Seek(ld,STREAM_SEEK_SET,NULL);




--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
RastaDja
Дата 9.11.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 1
Всего: 5



Код

LARGE_INTEGER ld;
ld.QuadPart = 0;
pStream34->Seek(ld,STREAM_SEEK_SET,NULL);



--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.