CreateStreamOnHGlobal()段错误

时间:2018-03-02 22:02:42

标签: c++ windows

我使用CreateStreamOnHGlobal创建了一个流,以便通过最少的复制提取写入其中的字节数组。流消费者没有错误(我不能控制它 - 它是一个WinAPI函数)但是当我尝试访问流的内存时,我得到了一个段错误。

IStreamPtr ipStream;
CreateStreamOnHGlobal(nullptr, TRUE, &ipStream);

FunctionWhichWritesToIStream(ipStream);

HGLOBAL handle;
GetHGlobalFromStream(ipMemory, &handle);
auto pBytes = static_cast<BYTE *>(handle);

LARGE_INTEGER zero;
zero.QuadPart = 0;
ULARGE_INTEGER nBytes;
ipMemory->Seek(zero, STREAM_SEEK_END, &nBytes);

FunctionWhichReadsFromBytes(pBytes, nBytes); // segfault

我做错了什么?

注意:我无法使用SHCreateMemStream,因为这不允许访问底层内存。

1 个答案:

答案 0 :(得分:1)

auto pBytes = static_cast<BYTE *>(handle);

是错误的。你需要使用

PBYTE pBytes = (PBYTE)GlobalLock(handle);

如果想直接访问流存储。不要忘记最后致电GlobalUnlock