1/24/2005

IStream接口和CString之间的转换

问:如何传递CString中包含的字符串到具有IStream类型参数的函数?
问:如何根据获得的IStream接口指针获得字符串?
答:
MFC7中的未归档类CStreamOnCString实现了IStream接口访问封装的CString类型的m_strStream成员。如果你没有MFC7,可以用CreateStreamOnGlobal创建IStream的内存流实现对象,之后调用IStream::Write将字符串写入内存流对象;或者创建IStream的内存流实现对象,反复调用IStream::Read和IStream::Write从源流复制数据到内存流,然后调用GetHGlobalFromStream函数直接访问内存流的内存句柄。

上面的一些调用在MFC中被封装到COleStreamFile 类中。
下面的代码把一个内存流读到字节数组。你可以根据字符串的类型把字节数组转化成字符串。
COleStreamFile osfRead;
osfRead.Attach(pStream);
long lLength=osfRead.GetLength();
CByteArray baBuf;
baBuf.SetSize(lLength);
osfRead.Read(baBuf.GetData(),lLength);

No comments: