extensions/source/ole/oleobjw.cxx | 73 ++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 30 deletions(-)
New commits: commit b0fa50814d9f5b5900df7bd8c00b54d57a010a20 Author: Steve Yin <stev...@apache.org> Date: Mon Dec 9 06:15:26 2013 +0000 Bug 123816 - Cannot send email with attachment via VBA code taking Notes as mail application diff --git a/extensions/source/ole/oleobjw.cxx b/extensions/source/ole/oleobjw.cxx index b4688c0..578c308 100644 --- a/extensions/source/ole/oleobjw.cxx +++ b/extensions/source/ole/oleobjw.cxx @@ -2333,56 +2333,69 @@ void IUnknownWrapper_Impl::getPropDesc(const OUString & sFuncName, FUNCDESC ** p //else no entry for sFuncName, pFuncDesc will not be filled in } -VARTYPE IUnknownWrapper_Impl::getElementTypeDesc(const TYPEDESC *desc) +VARTYPE lcl_getUserDefinedElementType( ITypeInfo* pTypeInfo, const DWORD nHrefType ) { VARTYPE _type( VT_NULL ); - - if (desc->vt == VT_PTR) - { - _type = getElementTypeDesc(desc->lptdesc); - _type |= VT_BYREF; - } - else if (desc->vt == VT_SAFEARRAY) + if ( pTypeInfo ) { - _type = getElementTypeDesc(desc->lptdesc); - _type |= VT_ARRAY; - } - else if (desc->vt == VT_USERDEFINED) - { - ITypeInfo* thisInfo = getTypeInfo(); //kept by this instance - CComPtr<ITypeInfo> spRefInfo; - thisInfo->GetRefTypeInfo(desc->hreftype, & spRefInfo.p); - if (spRefInfo) + CComPtr<ITypeInfo> spRefInfo; + pTypeInfo->GetRefTypeInfo( nHrefType, &spRefInfo.p ); + if ( spRefInfo ) { - TypeAttr attr(spRefInfo); - spRefInfo->GetTypeAttr( & attr); - if (attr->typekind == TKIND_ENUM) + TypeAttr attr( spRefInfo ); + spRefInfo->GetTypeAttr( &attr ); + if ( attr->typekind == TKIND_ENUM ) { - //We use the type of the first enum value. - if (attr->cVars == 0) + // We use the type of the first enum value. + if ( attr->cVars == 0 ) { - throw BridgeRuntimeError(OUSTR("[automation bridge] Could " - "not obtain type description")); + throw BridgeRuntimeError(OUSTR("[automation bridge] Could not obtain type description")); } - VarDesc var(spRefInfo); - spRefInfo->GetVarDesc(0, & var); + VarDesc var( spRefInfo ); + spRefInfo->GetVarDesc( 0, &var ); _type = var->lpvarValue->vt; } - else if (attr->typekind == TKIND_INTERFACE) + else if ( attr->typekind == TKIND_INTERFACE ) { _type = VT_UNKNOWN; } - else if (attr->typekind == TKIND_DISPATCH) + else if ( attr->typekind == TKIND_DISPATCH ) { _type = VT_DISPATCH; } + else if ( attr->typekind == TKIND_ALIAS ) + { + // TKIND_ALIAS is a type that is an alias for another type. So get that alias type. + _type = lcl_getUserDefinedElementType( pTypeInfo, attr->tdescAlias.hreftype ); + } else { - throw BridgeRuntimeError(OUSTR("[automation bridge] " - "Unhandled user defined type.")); + throw BridgeRuntimeError( OUSTR("[automation bridge] Unhandled user defined type.") ); } } } + return _type; +} + +VARTYPE IUnknownWrapper_Impl::getElementTypeDesc(const TYPEDESC *desc) +{ + VARTYPE _type( VT_NULL ); + + if (desc->vt == VT_PTR) + { + _type = getElementTypeDesc(desc->lptdesc); + _type |= VT_BYREF; + } + else if (desc->vt == VT_SAFEARRAY) + { + _type = getElementTypeDesc(desc->lptdesc); + _type |= VT_ARRAY; + } + else if (desc->vt == VT_USERDEFINED) + { + ITypeInfo* thisInfo = getTypeInfo(); //kept by this instance + _type = lcl_getUserDefinedElementType( thisInfo, desc->hreftype ); + } else { _type = desc->vt; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits