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
郑昀
草稿
Implementation Scope:
继续阅读之前,我们假设您熟悉以下知识:
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;
}
中、下篇将介绍“借用IStream流打包传递数据到MSMQ队列”。
Writen by zhengyun.NoJunk(at)tomosoft.dot.com
Disclaimers:
Programmer’s Blog List:
[MVPLeader]Grace Zhang
本文档仅供参考。本文档所包含的信息代表了在发布之日,zhengyun对所讨论问题的当前看法,zhengyun不保证所给信息在发布之日以后的准确性。
用户应清楚本文档的准确性及其使用可能带来的全部风险。可以复制和传播本文档,但须遵守以下条款:
复制时不得修改原文,复制内容须包含所有页 ;
所有副本均须含有 zhengyun的版权声明以及所提供的其它声明 ;