注意:我用Google搜索,搜索并尝试了我发现的每一件事。
真正的问题是我尝试将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
。我已经测试过,这绝对不是问题。
感谢。
答案 0 :(得分:3)
C ++区分大小写;该方法名为Read()
(它实际上是ISequentialStream
中定义的,IStream
继承自。)
请注意,它需要三个参数,而不是您尝试传递的两个参数。
HRESULT阅读([out] void * pv, [in] ULONG cb,[out] ULONG * pcbRead);
参数
pv [out]指向读取流数据的缓冲区的指针。
cb [in]要从流对象读取的数据的字节数。
pcbRead [out]指向接收实际的ULONG变量的指针 从流对象读取的字节数。