Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание потоков 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   Вверх
xvr
Дата 9.11.2010, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(RastaDja @  9.11.2010,  16:04 Найти цитируемый пост)
спс, но програ вылетает на
Попробуйте подать последний параметр (не NULL). MSDN утверждает, что туда можно давать NULL, но кто его знает ...


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 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))
{
       CComPtr<IStream> pStream;  //сколько сюда памяти выделить и как правельно создать IStream
  CreateStreamOnHGlobal(NULL,TRUE,&pStream);
       spPersistS->Save(pStream, TRUE);
LARGE_INTEGER ld;
ld.QuadPart = 0;
pStream34->Seek(ld,STREAM_SEEK_SET,NULL);
  pStream->Seek(ld,STREAM_SEEK_SET,NULL);
  unsigned char b;
 // while(pStream->Read(&b,1,NULL)==S_OK)
 // {
 //    cout<<hex<<b;
 //  }
}


как мне эти данные прочитать, while делает бесконечный цикл. как правельно считать все данные? и как их последовательно записать в виде строки?

спасибо


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


Эксперт
****


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

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



Цитата(RastaDja @  10.11.2010,  11:16 Найти цитируемый пост)
while делает бесконечный цикл.
Проверяйте 3й параметр метода pStream->Read (предварительно передав его, вместо NULL). Или извлеките handle куска памяти из pStream (GetHGlobalFromStream) и читайте напрямую


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


Опытный
**


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

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



решил таким кодом задачу, кажется работает, думаю проблема может возникнуть если обьект не реализует IPersistStrea::Stat.
и есчё посмотри - будет ли этот код дееспособен?
Код

CComPtr<IPersistStream> spPersistS;
                    hr = pDisp->QueryInterface(IID_IPersistStream, (void**)&spPersistS);
                    if (SUCCEEDED(hr))
                    {
                    
                    //    CComPtr<IStream> pStream34;
                        IStream* pStream34;
                        CreateStreamOnHGlobal(NULL,TRUE,&pStream34);
                        spPersistS->Save(pStream34, TRUE);
                        STATSTG stg;
                        //STATFLAG_DEFAULT
                        pStream34->Stat(&stg, STATFLAG_DEFAULT);
                        _ULARGE_INTEGER dlen = stg.cbSize; 
                        
                        LARGE_INTEGER ld;
                        ld.QuadPart = 0;
                        pStream34->Seek(ld,STREAM_SEEK_SET,NULL);
                        byte *data = new byte[dlen.QuadPart];
                        pStream34->Read((void*)data,dlen.QuadPart,NULL);
                                                
                        std::string s( reinterpret_cast< char const* >(data),dlen.QuadPart ) ;
                //        MessageBox(NULL,CComBSTR(s.c_str()),L"__-string fro byte[]-__",MB_OK);
                        pStream34->Release();
                        //--2




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


Эксперт
****


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

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



Работоспособен будет, но data надо в конце удалить (иначе будет утечка памяти). Еще возникают сомнения в читаемости строки s - spPersistS->Save не гарантирует, что сохраненные данные будут текстом, это могут быть и бинарные данные
Цитата(RastaDja @  10.11.2010,  17:02 Найти цитируемый пост)
IPersistStrea::Stat
Можно через 
pStream34->Seek(ld,STREAM_SEEK_END,&ld); - в ld получится размер


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


Опытный
**


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

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



Цитата

 Еще возникают сомнения в читаемости строки s - spPersistS->Save не гарантирует, что сохраненные данные будут текстом

дело в том, что для меня не важно какие данные. надо считать поток и записать его как строку. и сохранить данную строку (например в файл или ноду XML). Ну а после соответственно возобновить поток из строки, и создать обьэкт

Добавлено через 8 минут и 58 секунд
Цитата

Можно через 
pStream34->Seek(ld,STREAM_SEEK_END,&ld); - в ld получится размер

а не надо после опять делать 
Код

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   Вверх
RastaDja
Дата 10.11.2010, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



всё разобраля smile ,
Большое спасибо, но тему не закрываю, ато не полностью разобрался с потоками.
есчё раз спасибо, до завтра


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


Эксперт
****


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

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



Цитата(RastaDja @  10.11.2010,  17:20 Найти цитируемый пост)
сохранить данную строку (например в файл или ноду XML). 
Сделайте ее хекс дамп и сохраняйте. Иначе содержимое может визуально поломать текстовый формат xml. (Это только рекомендация)

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


Опытный
**


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

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



а ято такое хекс дамп, и как его сделать?

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


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


Эксперт
****


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

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



Цитата(RastaDja @  11.11.2010,  09:20 Найти цитируемый пост)
а что такое хекс дамп,  
Печать бинарных данных в виде одной длинной шестнадцатиричной строки

Цитата

и как его сделать?

Вход - buf, size - бинарные данные и их размер, выход - строка с дампом
Код

string hex_dump(const void* buf, size_t size)
{
 char* out=new char[size*2+1];
 const unsigned char* p=(const unsigned char*)buf;
 for(size_t i=0;i<size;++i)
  sprintf(out+2*i,"%02X",p[i]);
 string rv(out);
 delete[] out;
 return rv;
}

PS. Счас апологеты 'чистоты С++' меня съедят с потрохами за использование sprintf с C++ программе  smile 

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


Опытный
**


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

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



я тоже частенько sprintf использую

Добавлено через 13 минут и 7 секунд
спасибо, а можеш прокоментировать код? и обратную функцию написать?

типерь
Код

- <Msxml2.DOMDocument ID="xml">
- <![CDATA[ <a><s>Hello</s><s>Hello</s></a>

  ]]> 
  </Msxml2.DOMDocument>
- <Msxml2.DOMDocument ID="xml2">
- <![CDATA[ <root><wer>Text</wer><wer>Text</wer></root>

  ]]> 
  </Msxml2.DOMDocument>
  </root>


будет
Код

- <Msxml2.DOMDocument ID="xml">
- <![CDATA[ 3C613E3C733E48656C6C6F3C2F733E3C733E48656C6C6F3C2F733E3C2F613E0D0A
  ]]> 
  </Msxml2.DOMDocument>
- <Msxml2.DOMDocument ID="xml2">
- <![CDATA[ 3C726F6F743E3C7765723E546578743C2F7765723E3C7765723E546578743C2F7765723E3C2F726F6F743E0D0A
  ]]> 
  </Msxml2.DOMDocument>
  </root>



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


Эксперт
****


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

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



Цитата(RastaDja @  11.11.2010,  10:05 Найти цитируемый пост)
спасибо, а можеш прокоментировать код?
А что там комментировать? Он и так простой как пять копеек  smile 
Цитата

 и обратную функцию написать?
Ну как то так:
Код

string unhex(const string& str)
{
 size_t total=str.size()/2;
 char* dst=new char[total];
 for(size_t i=0;i<total;++i)
  {
   char h[]={str[i*2],str[i*2+1],0};
   dst[i]=strtoul(h,0,16);
  }
 string rv(dst,total);
 delete[] dst;
 return rv;
}

Только надо помнить, что в возвращенном string'е лежат бинарные данные, и трактовать ее как текстовую строку нельзя (в частности .c_str() не будет строкой в С понимании)

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


Опытный
**


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

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



спасибо, тут у меня есчё вопросы  smile 
есть код 
Код

IClassFactory* pCF;
IUnknown* pUnk;
IDispatch* pDisp;
CLSID clsid;
_bstr_t prog_id;
prog_id = stsave.c_str();
HRESULT hr=::CLSIDFromProgID(prog_id,&clsid);
hr = CoGetClassObject( clsid, CLSCTX_INPROC, NULL,IID_IClassFactory, (void**) &pCF );
hr = pCF->CreateInstance( NULL, IID_IUnknown, (void**) &pUnk );
pUnk->QueryInterface(IID_IDispatch, (void**)&pDisp);
IPersistStream* pPerStream;
if(SUCCEEDED(pDisp->QueryInterface(IID_IPersistStream, (void**)&pPerStream))){
    IStream* pStream;
    CreateStreamOnHGlobal(NULL,TRUE,&pStream);
    std::string st = _com_util::ConvertBSTRToString(bst_data);
    
    int len = st.length();
    byte *data = new byte[len];
    for(int i = 0; i<len; i++){
        data[i] = st[i];
    }
                    
    ULONG d;
    ULONG length = st.length();
    pStream->Write((void*)st.c_str(),length,&d);
    
    MessageBox(NULL, CComBSTR(data[0]), CComBSTR(st.c_str()), 1);
                    
    pPerStream->Load(pStream);
                    
    
    delete [] data;
//    delete pStream;
} //delete pPerStream;
//nodeCVDS->Add(CComBSTR("OBJECT"), pUnk);
nodeCVDS->m_varMap[bst_ID_str] = pDisp;
pCF->Release();

bst_data получаю так:
Код

CComBSTR bst_data;
Node->get_text(&bst_data);


имею исхлдный файл, из которого читаю
Код

<?xml version="1.0"?>
<root>

  ...

  
  <Msxml2.DOMDocument ID="xml"><![CDATA[<a><s>Hello</s><s>Hello</s></a>]]>
  </Msxml2.DOMDocument><Msxml2.DOMDocument ID="xml2">
    <![CDATA[<root><wer>Text</wer><wer>Text</wer></root>]]>
  </Msxml2.DOMDocument>
</root>

а на выход получаю 
Код

<?xml version="1.0"?>
<root>
  
...

  <Msxml2.DOMDocument ID="xml"><![CDATA[]]>
  </Msxml2.DOMDocument><Msxml2.DOMDocument ID="xml2">
    <![CDATA[]]>
  </Msxml2.DOMDocument>
</root>



как мне записать поток


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


Эксперт
****


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

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



Позовите pStream->Seek(0,SEEK_SET,NULL) перед pPerStream->Load(pStream);

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


Опытный
**


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

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



заработало, спасибо, а вы не подскажите какуюто литературу на русском по всем этим IPersist* IStream интерфейсам, ато везде всё на буржуйском


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


Эксперт
****


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

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



Видел 2 книги (на русском):

Дейл Роджерсон. Основы COM. 
Дэвид Чеппел. Технологии ActiveX и OLE. 

Для начала вполне достаточно

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


Опытный
**


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

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



спассибо


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


Опытный
**


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

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



xvr, спасибо за большое за помощь



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


Эксперт
****


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

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



Цитата(RastaDja @ 15.11.2010,  11:07)
xvr, спасибо за большое за помощь

Не за что. Обращайтесь, если что  smile 
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




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


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

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