ПРИМЕЧАНИЕ. Я искал поисковые запросы, искал и проверял каждую найденную вещь.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
в файл ресурсов. Я тестировал, и это абсолютно не проблема.
Спасибо.
Вы используете ту же переменную 'hGlobal' как для' LoadResource() ', так и для' GlobalAlloc() '. Вы вызываете 'FreeResource()' в 'HGLOBAL', возвращаемом' GlobalAlloc() ', а не тот, который возвращается' LoadResource() '. Подумайте об использовании 'SHCreateMemStream()' вместо 'GlobalAlloc()' и 'CreateStreamOnHGlobal()'. –
Не добавляйте новый вопрос к существующему, задайте новый. –