2015-12-12 2 views
-1

ПРИМЕЧАНИЕ. Я искал поисковые запросы, искал и проверял каждую найденную вещь.C++ Win32 IStream для проблем с строкой

Реальная проблема заключается в том, что я пытаюсь использовать IStream с вещами как get, getline, read, put

Погрешность, IStream has no member named 'read'

Код:

// For version info and etc 
HRSRC srcTest = FindResource(NULL, MAKEINTRESOURCE(2), RT_VERSION); 
HGLOBAL hGlobal = LoadResource(NULL, srcTest); 

// Gets the size of the resource, and locks it to get a pointer 
int size = SizeofResource(NULL, srcTest); 
LPVOID resPtr = LockResource(hGlobal); 

hGlobal = GlobalAlloc(GMEM_FIXED, size); 

// Copies the raw data into allocated space 
memcpy(hGlobal, resPtr, size); 

// Cleans 
FreeResource(hGlobal); 

// Creates a stream 
IStream* in = NULL; 
CreateStreamOnHGlobal(hGlobal, true, &in); 


// One example test 
std::string ret; 
char buffer[4096]; 

while (in->read(buffer, sizeof(buffer))) 

ret.append(buffer, sizeof(buffer)); 
ret.append(buffer, in.gcount()); 

Ресурс приходит непосредственно из VERSION_INFO в файл ресурсов. Я тестировал, и это абсолютно не проблема.

Спасибо.

+2

Вы используете ту же переменную 'hGlobal' как для' LoadResource() ', так и для' GlobalAlloc() '. Вы вызываете 'FreeResource()' в 'HGLOBAL', возвращаемом' GlobalAlloc() ', а не тот, который возвращается' LoadResource() '. Подумайте об использовании 'SHCreateMemStream()' вместо 'GlobalAlloc()' и 'CreateStreamOnHGlobal()'. –

+0

Не добавляйте новый вопрос к существующему, задайте новый. –

ответ

3

C++ чувствителен к регистру; метод называется Read() (он фактически определен в ISequentialStream, который наследует IStream).

Обратите внимание, что это три параметра, а не два, которые вы пытаетесь передать.

HRESULT Read ([выход] * аннулируются ру, [в] ULONG Си-Би, [выход] ULONG * pcbRead);

Параметры

ру [выход] указатель на буфер, который данные потока считывается в.

cb [in] Число байтов данных для чтения из объекта потока.

pcbRead [out] Указатель на переменную ULONG, которая принимает фактическое количество байтов, считанных с объекта потока.

Смежные вопросы