结构或大内存块打包的办法(上1.2)
2008-01-03 20:18
204 查看
The information in this article applies to:[/b] |
- Microsoft Visual C++ 6.0,SP5[/b] |
Version | Date | Creator | Description |
1.0.0.1 | 2004-2-23 | 郑昀 | 草稿 |
// 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_guidstypedef 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;[/b]// 打包函数:ChangeStruct2Variant(var, &msg);[/b]// 打包后的CComVariant传递给MSMQMessege的Body属性:pisMsg->Body= var;[/b]pisMsg->AppSpecific=-1;// 发送到消息队列:pisMsg->Send(pisQueue);.. ..} |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12751
相关文章推荐
- 结构或大内存块打包的办法(上1.2)
- 结构或大内存块打包的办法(上1.2)
- 结构或大内存块打包的办法(上1.2)
- 结构或大内存块打包的办法(下)
- 结构或大内存块打包的办法(上1.1)
- 结构或大内存块打包的办法(上1.1)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(上1.1)
- 结构或大内存块打包的办法(上1.1)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(中)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(下)
- 结构或大内存块打包的办法(下)
- 结构或大内存块打包的办法(上1.1)
- 结构或大内存块打包的办法(上2)
- 结构或大内存块打包的办法(下)
- 结构或大内存块打包的办法(上2)