VC中GlobalAlloc,GlobalLock,GlobalUnlock的使用及其说明
*buf_hdl = (char *)GlobalAlloc(GPTR, (size_t)buf_getsize);
*buf_data_p = (char *)GlobalLock(*buf_hdl)
(void)memcpy(((struct Rpc_bufhed *)buf_data_p)->eye,
buf_id,sizeof(((struct Rpc_bufhed *)buf_data_p)))
GlobalUnlock(*buf_hdl);
到网上些调查的资料:
调用GlobalAlloc函数分配一块内存,该函数会返回分配的内存句柄。
调用GlobalLock函数锁定内存块,该函数接受一个内存句柄作为参数,然后返回一个指向被锁定的内存块的指针。 您可以用该指针来读写内存。
调用GlobalUnlock函数来解锁先前被锁定的内存,该函数使得指向内存块的指针无效。
调用GlobalFree函数来释放内存块。您必须传给该函数一个内存句柄。
-------------------------------------------------------------------------------------------
获取IStream的大小
DWORD dwSize = 200000;
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE,dwSize);
LPVOID lpBuf = ::GlobalLock( hMem );
IStream* pStream = NULL;
HRESULT hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
ASSERT(SUCCEEDED(hr));
ULARGE_INTEGER StreamSize;
StreamSize.LowPart = 0;
IStream_Size(pStream,&StreamSize);