结构或大内存块打包的办法(上1.2)
来源:互联网 发布:社交网络电影完整版 编辑:程序博客网 时间:2024/05/22 01:48
The information in this article applies to: |
- Microsoft Visual C++ 6.0,SP5 |
结构或大内存块打包的办法(上1.2)
Revision History:
Version | Date | Creator | Description |
1.0.0.1 | 2004-2-23 | 郑昀 | 草稿 |
2.借用SAFEARRAY打包把结构写入MSMQ队列
续上1.1篇的打包步骤(VC++代码):
// ChangeStruct2Var函数的定义: // 第一个参数: // 类型:CComVariant // 作用:接收者 // 第二个参数: // 类型:_DATA* // 作用:源 HRESULT ChangeStruct2Variant (CComVariant &var, _DATA *pData) { HRESULT hr = S_OK; // 使用SafeArrayCreateVector API创建一个单维SAFEARRAY,分配一个sizeof(_DATA)大小的连续内存块 // VT--UI1代表非负整形的变量类型,1个字节 // 常数'0'定义数组的下界 LPSAFEARRAY lpsa = SafeArrayCreateVector(VT_UI1, 0, sizeof(_DATA)); LPBYTE pbData = NULL; if (lpsa) { //在你访问SAFEARRAY数据之前,你必须调用SafeArrayAccessData。该函数锁定数据并且返回一个指针。在这里,锁定数组意味着增加该数组的内部计数器(cLocks) hr = SafeArrayAccessData(lpsa, (void **)&pbData); } else hr = HRESULT_FROM_WIN32(GetLastError()); if (SUCCEEDED(hr)) { // 使用safe array: // 将传入的_DATA指针指向的内存复制到pbData CopyMemory(pbData, pData, sizeof(*pData)); // 设置var的类型为数组 var.vt = VT_ARRAY|VT_UI1; // 将var和我们的单维SAFEARRAY拉上关系: var.parray = lpsa; } if (pbData) { //相应用来释放数据的函数是SafeArrayUnaccessData(),该功能释放该参数的计数。 SafeArrayUnaccessData(var.parray); } if (FAILED(hr)) { // 销毁SAFEARRAY SafeArrayDestroy(lpsa); } return hr; }
//////////////////////////////////////////////////////////// //Added Headers: //////////////////////////////////////////////////////////// #include #include /////////////////////////////////////////////////////////// //Added for MSMQ: /////////////////////////////////////////////////////////// #import "mqoa.dll" no_namespace, named_guids typedef struct _DATA { int _n; char _str; }_DATA; //main: { .. .. .. .. IMSMQMessagePtr pisMsg = NULL; hr = pisMsg.CreateInstance("MSMQ.MSMQMessage"); _DATA msg; msg._n = 1; msg._str = '1'; CComVariant var; // 打包函数: ChangeStruct2Variant(var, &msg); // 打包后的CComVariant传递给MSMQMessege的Body属性: pisMsg->Body= var; pisMsg->AppSpecific=-1; // 发送到消息队列: pisMsg->Send(pisQueue); .. .. } |
这样,就可以成功地把一个结构递交到MSMQ队列中了。
上2篇继续介绍如何读取这样的MSMQ消息。
中、下篇将介绍“借用IStream流打包传递数据到MSMQ队列”。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12751
- 结构或大内存块打包的办法(上1.2)
- 结构或大内存块打包的办法(上1.2)
- 结构或大内存块打包的办法(上1.2)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(下)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(下)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(下)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(上1.1)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(上1.1)
- 结构或大内存块打包的办法(上2)
- [SQL]数据库置疑的故事
- [C#][正则表达式]寻找匹配的Groups的几种方法
- 阳为SS/SN 阴为SP(下)
- 阳为SS/SN 阴为SP(上)
- 搜索某个字符串在那个表的那个字段中
- 结构或大内存块打包的办法(上1.2)
- [Outlook]如何规避“Email Security Update”警告框
- [Domino]Java访问Domino必需配置的服务器设置
- 结构或大内存块打包的办法(上1.1)
- 豆瓣九点的周末:信息过滤器回归无序
- [MQ]MSMQ的访问方式乱弹
- 结构或大内存块打包的办法(中)
- 阳为SS/SN 阴为SP(上)
- [C#][固定格式网页解析]使用正则表达式处理网页的初步体会