结构或大内存块打包的办法(中)
2008-01-03 17:50
211 查看
The information in this article applies to:[/b] |
- Microsoft Visual C++ 6.0,SP5[/b] |
Revision History:
对本文档所有修改都应按修改时间顺序记录在此。Version | Date | Creator | Description |
1.0.0.1 | 2004-2-23 | 郑昀 | 草稿 |
Implementation Scope:
继续阅读之前,我们假设您熟悉以下知识:n SAFEARRAYn ISTREAMn Microsoft MSMQ目录:1:概述2:借用SAFEARRAY打包把结构写入MSMQ队列3:借用IStream流打包传递数据到MSMQ队列3.借用IStream流传递数据
正如前面所述,当你有一块非常巨大的数据要传递给MSMQ队列时,而且你希望一次液压成型,那么把它打包入IStream流,也是一个很常用技巧,了解COM的人都知道,我也不多解释了。我们研究了ATL中IPersistMemoryImpl接口Load方法的实现机理,来做我们的事情:// 函数名:LoadStreamOnHugeMemory// 功能: 同上// 第一个参数pvMem指向一块要打包的内存,第二个参数指明这块内存的大小HRESULT LoadStreamOnHugeMemory(void pvMem, ULONG cbSize){ // Get Memory Handle: HGLOBAL h = GlobalAlloc(GMEM_MOVEABLE, cbSize); If(NULL == h) return E_OUTOFMEMORY; LPVOID pv = GlobalLock(h); If(!pv) return E_OUTOFMEMORY; // Copy to memory block CopyMemory(pv, pvMem, cbSize); CComPtr spStream; // Create stream on Memory: HRESULT hr = CreateStreamOHGlobal(h, TRUE, &spStream); If(FAILED(hr)) { GlobalUnlock(h); GlobalFree(h); return hr; } // stream now owns the memory // unlock the dataGlobalUnlock(hGlobal); // Create a stream holder. Load the stream holder from the global stream.// THIS STREAM HOLDER IS INTERITED FROM IPersistStream// And all virtual functions are Modified to handle the object....CComPtr pHolder = new CComObject ; CComPtr pHolderStream;hr = pHolder->QueryInterface (IID_IPersistStream, (void **)&pHolderStream); pStream->Seek( zero, STREAM_SEEK_SET, NULL );pHolderStream->Load(pStream); CComVariant vComData = pHolder;.. .. //// now, you have a big chunk of memory loaded into a ComVariant//// [/b]现在你可以把打包后的[/b]CComVariant[/b]传递给[/b]MSMQMessege[/b]的[/b]Body[/b]属性了:[/b][/b]pisMsg->Body = vComData;[/b].. ..} |
Disclaimers:
Programmer’s Blog List: |
博客堂[/b] |
小气的神[/b] |
飞鹰手记[/b] [/b]飞鹰手记之.NET专版[/b][/b] |
蝈蝈俊[/b] |
思归[/b] |
[MVPLeader]Grace Zhang[/b] |
豆腐[/b] |
跟随大象的舞步[/b] |
Don Box's Blog[/b][/b] |
Eric.Weblog()[/b][/b] |
The .NET Guy[/b][/b] |
Blogs@asp.net[/b][/b] |
所有副本均须含有 zhengyun的版权声明以及所提供的其它声明 ;
不得以赢利为目的对本文档进行传播 。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12749
相关文章推荐
- 结构或大内存块打包的办法(上1.1)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(下)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(上1.1)
- 结构或大内存块打包的办法(下)
- 结构或大内存块打包的办法(下)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(上1.2)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(上1.2)