Форум программистов, компьютерный форум CyberForum.ru

Открытие хранилища StgOpenStorage() и чтение данных из потока Read() - C++

Восстановить пароль Регистрация
 
stream
0 / 0 / 0
Регистрация: 19.11.2011
Сообщений: 26
19.11.2011, 20:56     Открытие хранилища StgOpenStorage() и чтение данных из потока Read() #1
Возникла следующая проблема: при чтении потока stream всё нормально, если строки объявлены в виде статических массивов. А если они объявлены динамически, то работает не корректно. Помогите! Сам не знаю в чем причина. Вот кусок исходника
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
HRESULT hresStream;
LPSTREAM stream = NULL;
//Открытие iStream
hresStream = storage->OpenStream(L"Main MetaData Stream", NULL,STGM_READ|STGM_DIRECT|STGM_SHARE_EXCLUSIVE,0, &stream);
if (!FAILED(hresStream))
{
    cout << "ok open stream" << endl;
}
else cout << "error open stream" << endl;
//Читаем данный из потока
ULONG cb;
 
/*----------------------------Читаем иформацию о IStream-----------------------------------*/
        STATSTG StreamInfo;
        if(stream->Stat(&StreamInfo,STATFLAG_DEFAULT) == S_OK)
                         cout << "ok info read" << endl;
               else
                         cout << "error info read" << endl;
 
 
 
//StreamInfo.cbSize.QuadPart - размер читаемого потока в байтах
 
 
/*------------------------------------------------------------------------------------------*/
 
 
/*------------------Рабочая версия в статике-----------------------------------------------*/
OLECHAR buffer[18000];
hresStream = stream->Read(&buffer,StreamInfo.cbSize.QuadPart, &cb);
char buf[18000];
wcstombs((CHAR*)&buf,(OLECHAR*)&buffer,sizeof(buf));
/*------------------------------------------------------------------------------------------*/
 
/*-----Версия с динамически распределением памяти НЕрабочая---------------------------*/
    /*OLECHAR* buffer = new OLECHAR[StreamInfo.cbSize.QuadPart];
    hresStream = stream->Read(buffer,StreamInfo.cbSize.QuadPart, &cb);
    char* buf = new char[StreamInfo.cbSize.QuadPart];
    wcstombs((CHAR*)buf,(OLECHAR*)buffer,StreamInfo.cbSize.QuadPart);
/*------------------------------------------------------------------------------------------*/
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2011, 20:56     Открытие хранилища StgOpenStorage() и чтение данных из потока Read()
Посмотрите здесь:

C++ Чтение из потока буковок:)
Открытие потока. Ошибка. Подскажите. C++
Чтение из файла read и rdbuf C++
C++ Cin, чтение с конца полученного потока
чтение строки как потока C++
Чтение файла из входного потока C++
C++ Чтение числа из потока и обработка ошибок
C++ Чтение из потока в вектор и в struct

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 01:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru