C ++ Win32 IStream字符串问题

时间:2015-12-12 20:31:05

标签: c++ winapi stream

注意:我用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。我已经测试过,这绝对不是问题。

感谢。

1 个答案:

答案 0 :(得分:3)

C ++区分大小写;该方法名为Read()(它实际上是ISequentialStream中定义的,IStream继承自。)

请注意,它需要三个参数,而不是您尝试传递的两个参数。

  

HRESULT阅读([out] void * pv,                   [in] ULONG cb,[out] ULONG   * pcbRead);

     

参数

     

pv [out]指向读取流数据的缓冲区的指针。

     

cb [in]要从流对象读取的数据的字节数。

     

pcbRead [out]指向接收实际的ULONG变量的指针   从流对象读取的字节数。