The information in this article applies to: |
- Microsoft Visual C++ 6.0,SP5 |
结构或大内存块打包的办法(上)
Revision History:
对本文档所有修改都应按修改时间顺序记录在此。
Version |
Date |
Creator |
Description |
1.0.0.1 |
2004-2-23 |
郑昀 |
草稿 |
:
继续阅读之前,我们假设您熟悉以下知识:
n SAFEARRAY
n ISTREAM
n Microsoft MSMQ
目录:
1:概述
2:借用SAFEARRAY打包把结构写入MSMQ队列
3:借用IStream流打包传递数据到MSMQ队列
下面给出读取MSMQ消息时解析的步骤(VC++代码):
//////////////////////////////////////////////////////////// //Added Headers: //////////////////////////////////////////////////////////// #include <comdef.h> #include <atlbase.h> /////////////////////////////////////////////////////////// //Added for MSMQ: /////////////////////////////////////////////////////////// #import "mqoa.dll" no_namespace, named_guids typedef struct _DATA { int _n; char _str; }_DATA; //main: { .. .. .. .. hr = pisQI->raw_Open(MQ_PEEK_ACCESS,MQ_DENY_NONE,&pisQueue); IMSMQMessagePtr piMessage; // 获取MSMQ队列中的一个消息: piMessage = pisQueue->PeekCurrent(); _DATA *msg = new _DATA(); // 解析函数: ChangeVariant2Struct(CComVariant(piMessage->Body), msg); .. .. } // ChangeVariant2Struct函数的定义: // 第一个参数: // 类型:CComVariant // 作用:源 // 第二个参数: // 类型:_DATA* // 作用:接收者 HRESULT ChangeVariant2Struct (CComVariant &var, _DATA *DP) { SAFEARRAY* psa; BYTE HUGEP *lpb; psa = var.parray; SafeArrayAccessData(psa, (void HUGEP **)&lpb); CopyMemory((LPVOID)DP, (LPVOID)lpb, 8); SafeArrayUnaccessData(psa); return S_OK; } |
Writen by zhengyun.NoJunk(at)tomosoft.dot.com
Disclaimers:
Programmer’s Blog List: |
|
|
|
|
|
|
[MVPLeader] |
|
|
|
|
|
|
|
本文档仅供参考。本文档所包含的信息代表了在发布之日,zhengyun对所讨论问题的当前看法,zhengyun不保证所给信息在发布之日以后的准确性。
用户应清楚本文档的准确性及其使用可能带来的全部风险。可以复制和传播本文档,但须遵守以下条款:
- 复制时不得修改原文,复制内容须包含所有页 ;
- 所有副本均须含有 zhengyun的版权声明以及所提供的其它声明 ;
文章来源于领测软件测试网 https://www.ltesting.net/