COM编程--字符串结构体转换
来源:互联网 发布:雅克比矩阵的意义 编辑:程序博客网 时间:2024/06/13 03:56
1、将结构体保存到VARIANT中
// @desc : 转为安全数组HRESULT Hr;SAFEARRAY *pSArray;CComQIPtr<IRecordInfo> spRecordInfo;Hr = ::GetRecordInfoFromGuids(LIBID_VT_CommUtiLib, 1, 0, LOCALE_USER_DEFAULT, __uuidof(TAvailableRoom), &spRecordInfo);if( S_OK != Hr ) {return;}pSArray = ::SafeArrayCreateVectorEx( VT_RECORD, 0, nSize, (void*)spRecordInfo );TAvailableRoom* pData = NULL;Hr = ::SafeArrayAccessData(pSArray,(void**)&pData);TAvailableRoom *pDElement;for( LONG n = 0; n < nSize; n++ ){// @desc : SM_MEETINGINFO& SElementRef = vtMeetingRoom[n];pDElement = &pData[n];// @desc : CopypDElement->nConfID= SElementRef.nConfID;pDElement->bstrConfName = CComBSTR( SElementRef.szConfName ).Detach();pDElement->nMaxCount = SElementRef.wMaxCount;pDElement->nCurCount = SElementRef.wCurCount;}::SafeArrayUnaccessData( pSArray );V_ARRAY( pVal ) = pSArray;V_VT( pVal ) = VT_ARRAY | VT_RECORD;
VARIANT varArray;GetAvailableRooms(&varArray);GetAvailableRooms( VARIANT * pVal, LONG *pnErrCode)
CSafeArrayWarper arrConf;arrConf.Attach(variant.parray);CString sVal;LONG nMaxSize = arrConf.GetCount();if (nMaxSize){TVTRoomAvailable* pData = NULL;TVTRoomAvailable* pEle = NULL;HRESULT hr = arrConf.AccessData((void**)&pData);ASSERT(SUCCEEDED(hr));for (LONG i = arrConf.GetLowerBound(); i < nMaxSize; i++){pEle = &pData[i];sVal = pEle->bstrConfName;SM_MEETINGINFO* pInfo = new SM_MEETINGINFO;if (pInfo){_stprintf_s(pInfo->szConfName, _countof(pInfo->szConfName), _T("%s"), pEle->bstrConfName);pInfo->nConfID = pEle->nConfID;pInfo->wMaxCount = pEle->nMaxCount;pInfo->wCurCount = pEle->nCurCount;m_vecMeetingInfo.push_back(pInfo);}}arrConf.UnAccessData();}arrConf.Detach();
#pragma onceclass CSafeArrayWarper{public:CSafeArrayWarper(void) : m_psa(NULL) {};~CSafeArrayWarper(void) {HRESULT hRes = Destroy();ATLASSERT(SUCCEEDED(hRes));};public:HRESULT Attach(const SAFEARRAY *psaSrc) {HRESULT hRes = S_OK;m_psa = const_cast<LPSAFEARRAY>(psaSrc);hRes = Lock();return hRes;}LPSAFEARRAY Detach(){Unlock();LPSAFEARRAY pTemp = m_psa;m_psa = NULL;return pTemp;} HRESULT Destroy(){HRESULT hRes = S_OK;if (m_psa != NULL){hRes = Unlock();if (SUCCEEDED(hRes)){hRes = SafeArrayDestroy(m_psa);if (SUCCEEDED(hRes))m_psa = NULL;}}return hRes;}public:LPSAFEARRAY* GetSafeArrayPtr() throw(){return &m_psa;}HRESULT GetSafeArrayData(void HUGEP** ppvData) throw(){HRESULT hRes = S_OK;if (m_psa != NULL){hRes = ::SafeArrayAccessData(m_psa, ppvData);}return hRes;}LONG GetLowerBound(UINT uDim = 0) const{ATLASSUME(m_psa != NULL);LONG lLBound = 0;HRESULT hRes = SafeArrayGetLBound(m_psa, uDim+1, &lLBound);if (FAILED(hRes))AtlThrow(hRes);return lLBound;}LONG GetUpperBound(UINT uDim = 0) const{ATLASSUME(m_psa != NULL);LONG lUBound = 0;HRESULT hRes = SafeArrayGetUBound(m_psa, uDim+1, &lUBound);if (FAILED(hRes))AtlThrow(hRes);return lUBound;}ULONG GetCount(UINT uDim = 0) const{ATLASSUME(m_psa != NULL);ATLASSERT(uDim < GetDimensions());LONG lLBound, lUBound;HRESULT hRes = SafeArrayGetLBound(m_psa, uDim+1, &lLBound);ATLASSERT(SUCCEEDED(hRes));if(FAILED(hRes))AtlThrow(hRes);hRes = SafeArrayGetUBound(m_psa, uDim+1, &lUBound);ATLASSERT(SUCCEEDED(hRes));if(FAILED(hRes))AtlThrow(hRes);return (lUBound - lLBound + 1);}UINT GetDimensions() const{ATLASSUME(m_psa != NULL);return SafeArrayGetDim(m_psa);}bool IsSizable() const{ATLASSUME(m_psa != NULL);if(m_psa == NULL)AtlThrow(E_FAIL);return (m_psa->fFeatures & FADF_FIXEDSIZE) ? false : true;}public:// void HUGEP* GetAt(LONG lIndex) const// {// ATLASSUME(m_psa != NULL);// if(m_psa == NULL)// AtlThrow(E_FAIL);// // LONG lLBound = GetLowerBound();// ATLASSERT(lIndex >= lLBound);// ATLASSERT(lIndex <= GetUpperBound());// if ((lIndex < lLBound) || (lIndex > GetUpperBound()))// AtlThrow(E_INVALIDARG);// // return ((_ATL_AutomationType<T>::_typewrapper*)m_psa->pvData)[lIndex-lLBound];// }// // typename _ATL_AutomationType<T>::_typewrapper& GetAt(LONG lIndex)// {// ATLASSUME(m_psa != NULL);// if(m_psa == NULL)// AtlThrow(E_FAIL);// // LONG lLBound = GetLowerBound();// ATLASSERT(lIndex >= lLBound);// ATLASSERT(lIndex <= GetUpperBound());// if ((lIndex < lLBound) || (lIndex > GetUpperBound()))// AtlThrow(E_INVALIDARG);// // return ((_ATL_AutomationType<T>::_typewrapper*)m_psa->pvData)[lIndex-lLBound];// }protected:HRESULT Lock(){return S_OK;// ATLASSUME(m_psa != NULL);// return SafeArrayLock(m_psa);}HRESULT Unlock(){return S_OK;// ATLASSUME(m_psa != NULL);// return SafeArrayUnlock(m_psa);}private:SAFEARRAY* m_psa;};
0 0
- COM编程--字符串结构体转换
- COM字符串转换大全
- 结构体/字符串之间的转换
- int stirng互轉;转换时间结构体为YYYYMMDDhhmmss字符串
- 字符串转换整形数据+结构体数组排序
- 字符串转换整形数据+结构体数组排序
- 字符串转换整形数据+结构体数组排序
- C++结构体和JSON字符串之间的相互转换
- java 树形结构转换为json字符串
- socket编程相关的结构体和字节序转换、IP、PORT转换函数
- 使用COM+参数化对象结构编程技术
- 使用 COM+ 参数化对象结构编程技术
- 使用 COM+ 参数化对象结构编程技术
- 使用 COM+ 参数化对象结构编程技术
- 数组、结构体、字符串
- 结构体转化字符串
- 结构体转字符串
- 使用Tuxedo将C语言中的结构体转换成Xml格式的字符串
- 解决yum错误Error: requested datatype primary not available
- c_str()函数
- 怎么给tee7文章增加附加价值
- javascript console
- 从广告商那里获得我们应得的钱 看广告能挣钱 付费广告的时代来临
- COM编程--字符串结构体转换
- Android,隐藏/显示软键盘
- spring MVC之返回JSON数据(Spring3.0 MVC)
- 2013级C++第4周(春)项目——再和对象找感觉【项目4扩展3(选做)】
- ARM寄存器总结
- maven3实战之仓库(maven仓库分类)
- eclipse中配置javap
- Android ActionBar 一步一步分析
- Android中onItemLongClick和onCreateContextMenu的搭配使用实现SQLite增删改查