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