diff --git a/dlls/oleaut32/oleaut32.spec b/dlls/oleaut32/oleaut32.spec
index 5f708c70df29ae2b5fe87d89a3009903d7d507fa..6d5500321ecd5e77ab4deb2e23cd6de5d4c4928c 100644
--- a/dlls/oleaut32/oleaut32.spec
+++ b/dlls/oleaut32/oleaut32.spec
@@ -73,6 +73,7 @@ import ole32.dll
 74 stdcall VarR4FromStr(wstr long long ptr) VarR4FromStr
 75 stub VarR4FromDisp
 76 stdcall VarR4FromBool(long ptr) VarR4FromBool
+77 stdcall SafeArrayGetVarType(ptr ptr) SafeArrayGetVarType
 78 stdcall VarR8FromUI1(long ptr) VarR8FromUI1
 79 stdcall VarR8FromI2(long ptr) VarR8FromI2
 80 stdcall VarR8FromI4(long ptr) VarR8FromI4
diff --git a/dlls/oleaut32/safearray.c b/dlls/oleaut32/safearray.c
index 0f2b62dc0d00b7e472ff9ee15084cab89094a55d..25ac1b6a2de03abde6e25205828d7ad977ebe763 100644
--- a/dlls/oleaut32/safearray.c
+++ b/dlls/oleaut32/safearray.c
@@ -1036,3 +1036,45 @@ static HRESULT duplicateData(
   return S_OK;
 }
 
+
+/************************************************************************ 
+ *		SafeArrayGetVarType
+ * Returns the VARTYPE stored in the given safearray
+ */
+HRESULT WINAPI SafeArrayGetVarType(
+  SAFEARRAY* psa,
+  VARTYPE*   pvt)
+{
+  HRESULT hr = E_INVALIDARG;
+  VARTYPE vt = VT_EMPTY;
+
+  /* const short VARTYPE_OFFSET = -4; */
+
+  if (psa->fFeatures & FADF_HAVEVARTYPE)
+  {
+    /* VT tag @ negative offset 4 in the array descriptor */
+    FIXME("Returning VT_BSTR instead of VT_...");
+    vt = VT_BSTR;
+  }
+  else if (psa->fFeatures & FADF_RECORD)
+  {
+    vt = VT_RECORD;
+  }
+  else if (psa->fFeatures & FADF_DISPATCH)
+  {
+    vt = VT_DISPATCH;
+  }
+  else if (psa->fFeatures & FADF_UNKNOWN)
+  {
+    vt = VT_UNKNOWN;
+  }
+
+  if (vt != VT_EMPTY)
+  {
+    *pvt = vt;
+    hr = S_OK;
+  }
+  
+  TRACE("HRESULT = %08lx", hr);
+  return hr;
+}
diff --git a/include/wine/obj_oleaut.h b/include/wine/obj_oleaut.h
index 3c2ae39cbd0d013bb159d632d126e07112492dfd..5ebca28c6562972dd39fcf7dc75a24a99a9e07fa 100644
--- a/include/wine/obj_oleaut.h
+++ b/include/wine/obj_oleaut.h
@@ -467,6 +467,7 @@ enum VARENUM {
 	VT_USERDEFINED	= 29,
 	VT_LPSTR  = 30,
 	VT_LPWSTR = 31,
+	VT_RECORD = 36,
 	VT_FILETIME = 64,
 	VT_BLOB = 65,
 	VT_STREAM = 66,