You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by st...@apache.org on 2013/12/09 07:15:27 UTC

svn commit: r1549481 - /openoffice/trunk/main/extensions/source/ole/oleobjw.cxx

Author: steve_y
Date: Mon Dec  9 06:15:26 2013
New Revision: 1549481

URL: http://svn.apache.org/r1549481
Log:
Bug 123816 - Cannot send email with attachment via VBA code taking Notes as mail application

Modified:
    openoffice/trunk/main/extensions/source/ole/oleobjw.cxx

Modified: openoffice/trunk/main/extensions/source/ole/oleobjw.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/extensions/source/ole/oleobjw.cxx?rev=1549481&r1=1549480&r2=1549481&view=diff
==============================================================================
--- openoffice/trunk/main/extensions/source/ole/oleobjw.cxx (original)
+++ openoffice/trunk/main/extensions/source/ole/oleobjw.cxx Mon Dec  9 06:15:26 2013
@@ -2333,6 +2333,50 @@ void IUnknownWrapper_Impl::getPropDesc(c
    //else no entry for sFuncName, pFuncDesc will not be filled in    
 }
 
+VARTYPE lcl_getUserDefinedElementType( ITypeInfo* pTypeInfo, const DWORD nHrefType )
+{
+    VARTYPE _type( VT_NULL );
+    if ( pTypeInfo )
+    {
+        CComPtr<ITypeInfo> spRefInfo;
+        pTypeInfo->GetRefTypeInfo( nHrefType, &spRefInfo.p );
+        if ( spRefInfo )
+        {
+            TypeAttr attr( spRefInfo );
+            spRefInfo->GetTypeAttr( &attr );
+            if ( attr->typekind == TKIND_ENUM )
+            {
+                // We use the type of the first enum value.
+                if ( attr->cVars == 0 )
+                {
+                    throw BridgeRuntimeError(OUSTR("[automation bridge] Could not obtain type description"));
+                }
+                VarDesc var( spRefInfo );
+                spRefInfo->GetVarDesc( 0, &var );
+                _type = var->lpvarValue->vt;
+            }
+            else if ( attr->typekind == TKIND_INTERFACE )
+            {
+                _type = VT_UNKNOWN;
+            }
+            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.") );
+            }
+        }
+    }
+    return _type;
+}
+
 VARTYPE IUnknownWrapper_Impl::getElementTypeDesc(const TYPEDESC *desc)
 {
 	VARTYPE _type( VT_NULL );
@@ -2350,38 +2394,7 @@ VARTYPE IUnknownWrapper_Impl::getElement
 	else if (desc->vt == VT_USERDEFINED)
 	{
 		ITypeInfo* thisInfo = getTypeInfo(); //kept by this instance
-		CComPtr<ITypeInfo>	spRefInfo;
-		thisInfo->GetRefTypeInfo(desc->hreftype, & spRefInfo.p);
-		if (spRefInfo)
-		{
-			TypeAttr  attr(spRefInfo);
-			spRefInfo->GetTypeAttr( & attr);
-			if (attr->typekind == TKIND_ENUM)
-			{
-				//We use the type of the first enum value.
-				if (attr->cVars == 0)
-				{
-					throw BridgeRuntimeError(OUSTR("[automation bridge] Could "
-						"not obtain type description"));
-				}
-				VarDesc var(spRefInfo);
-				spRefInfo->GetVarDesc(0, & var);
-				_type = var->lpvarValue->vt; 
-			}
-			else if (attr->typekind == TKIND_INTERFACE)
-			{
-				_type = VT_UNKNOWN;
-			}
-			else if (attr->typekind == TKIND_DISPATCH)
-			{
-				_type = VT_DISPATCH;
-			}
-			else 
-			{
-				throw BridgeRuntimeError(OUSTR("[automation bridge] "
-					"Unhandled user defined type."));
-			}
-		}
+		_type = lcl_getUserDefinedElementType( thisInfo, desc->hreftype );
 	}
 	else
 	{