最近在修改一个开源程序,其中要用到IStream流,找了好久,终于知道了如何从已有的内存区域创建一个IStream内存流对象。
HANDLE hFile=CreateFile(szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //从指定的路径szFilePath中读取文件句柄
DWORD dwFileSize=GetFileSize(hFile, NULL); //获得文件的大小,用来分配全局内存
HGLOBAL hFileMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //给文件分配全局内存
void *pFileMemory=GlobalLock(hFileMemory); //锁定内存
DWORD dwReadedSize; //保存实际读取的文件大小
ReadFile(hFile, pFileMemory, dwFileSize, &dwReadedSize, NULL); //读取文件到全局内存
GlobalUnlock(hFileMemory); //解锁内存
CloseHandle(hFile); //关闭文件句柄
IStream *pIStream;//创建一个IStream接口指针,用来保存文件流
CreateStreamOnHGlobal(hFileMemory, false, &pIStream) //用全局内存初使化IStream接口指针
HANDLE hFile=CreateFile(szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //从指定的路径szFilePath中读取文件句柄
DWORD dwFileSize=GetFileSize(hFile, NULL); //获得文件的大小,用来分配全局内存
HGLOBAL hFileMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //给文件分配全局内存
void *pFileMemory=GlobalLock(hFileMemory); //锁定内存
DWORD dwReadedSize; //保存实际读取的文件大小
ReadFile(hFile, pFileMemory, dwFileSize, &dwReadedSize, NULL); //读取文件到全局内存
GlobalUnlock(hFileMemory); //解锁内存
CloseHandle(hFile); //关闭文件句柄
IStream *pIStream;//创建一个IStream接口指针,用来保存文件流
CreateStreamOnHGlobal(hFileMemory, false, &pIStream) //用全局内存初使化IStream接口指针