Robert Shearman : oleaut: Implement VarBstrFromDisp.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Mar 6 04:50:52 CST 2006


Module: wine
Branch: refs/heads/master
Commit: b3a8a3d5591a12ccffed9220d733988e56e504ce
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=b3a8a3d5591a12ccffed9220d733988e56e504ce

Author: Robert Shearman <rob at codeweavers.com>
Date:   Sun Mar  5 13:37:47 2006 +0000

oleaut: Implement VarBstrFromDisp.

---

 dlls/oleaut32/oleaut32.spec |    2 +-
 dlls/oleaut32/vartype.c     |   54 ++++++++++++++++++++++++++++++-------------
 2 files changed, 39 insertions(+), 17 deletions(-)

diff --git a/dlls/oleaut32/oleaut32.spec b/dlls/oleaut32/oleaut32.spec
index 9da60ec..ad110c7 100644
--- a/dlls/oleaut32/oleaut32.spec
+++ b/dlls/oleaut32/oleaut32.spec
@@ -111,7 +111,7 @@
 112 stdcall VarBstrFromR8(double long long ptr)
 113 stdcall VarBstrFromCy(double long long ptr)
 114 stdcall VarBstrFromDate(double long long ptr)
-115 stub VarBstrFromDisp
+115 stdcall VarBstrFromDisp(ptr long long ptr)
 116 stdcall VarBstrFromBool(long long long ptr)
 117 stdcall VarFormatPercent(ptr long long long long long ptr)
 118 stdcall VarBoolFromUI1(long ptr)
diff --git a/dlls/oleaut32/vartype.c b/dlls/oleaut32/vartype.c
index 1214752..5c5ec0c 100644
--- a/dlls/oleaut32/vartype.c
+++ b/dlls/oleaut32/vartype.c
@@ -110,7 +110,8 @@ static HRESULT VARIANT_NumberFromBstr(OL
 }
 
 /* Coerce VT_DISPATCH to another type */
-static HRESULT VARIANT_FromDisp(IDispatch* pdispIn, LCID lcid, void* pOut, VARTYPE vt)
+static HRESULT VARIANT_FromDisp(IDispatch* pdispIn, LCID lcid, void* pOut,
+                                VARTYPE vt, DWORD dwFlags)
 {
   static const DISPPARAMS emptyParams = { NULL, NULL, 0, 0 };
   VARIANTARG srcVar, dstVar;
@@ -127,7 +128,7 @@ static HRESULT VARIANT_FromDisp(IDispatc
   {
     /* Convert the property to the requested type */
     V_VT(&dstVar) = VT_EMPTY;
-    hRet = VariantChangeTypeEx(&dstVar, &srcVar, lcid, 0, vt);
+    hRet = VariantChangeTypeEx(&dstVar, &srcVar, lcid, dwFlags, vt);
     VariantClear(&srcVar);
 
     if (SUCCEEDED(hRet))
@@ -448,7 +449,7 @@ HRESULT WINAPI VarI1FromStr(OLECHAR* str
  */
 HRESULT WINAPI VarI1FromDisp(IDispatch* pdispIn, LCID lcid, signed char* pcOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pcOut, VT_I1);
+  return VARIANT_FromDisp(pdispIn, lcid, pcOut, VT_I1, 0);
 }
 
 /************************************************************************
@@ -741,7 +742,7 @@ HRESULT WINAPI VarUI1FromStr(OLECHAR* st
  */
 HRESULT WINAPI VarUI1FromDisp(IDispatch* pdispIn, LCID lcid, BYTE* pbOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pbOut, VT_UI1);
+  return VARIANT_FromDisp(pdispIn, lcid, pbOut, VT_UI1, 0);
 }
 
 /************************************************************************
@@ -1042,7 +1043,7 @@ HRESULT WINAPI VarI2FromStr(OLECHAR* str
  */
 HRESULT WINAPI VarI2FromDisp(IDispatch* pdispIn, LCID lcid, SHORT* psOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, psOut, VT_I2);
+  return VARIANT_FromDisp(pdispIn, lcid, psOut, VT_I2, 0);
 }
 
 /************************************************************************
@@ -1356,7 +1357,7 @@ HRESULT WINAPI VarUI2FromStr(OLECHAR* st
  */
 HRESULT WINAPI VarUI2FromDisp(IDispatch* pdispIn, LCID lcid, USHORT* pusOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pusOut, VT_UI2);
+  return VARIANT_FromDisp(pdispIn, lcid, pusOut, VT_UI2, 0);
 }
 
 /************************************************************************
@@ -1632,7 +1633,7 @@ HRESULT WINAPI VarI4FromStr(OLECHAR* str
  */
 HRESULT WINAPI VarI4FromDisp(IDispatch* pdispIn, LCID lcid, LONG *piOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, piOut, VT_I4);
+  return VARIANT_FromDisp(pdispIn, lcid, piOut, VT_I4, 0);
 }
 
 /************************************************************************
@@ -1941,7 +1942,7 @@ HRESULT WINAPI VarUI4FromStr(OLECHAR* st
  */
 HRESULT WINAPI VarUI4FromDisp(IDispatch* pdispIn, LCID lcid, ULONG *pulOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pulOut, VT_UI4);
+  return VARIANT_FromDisp(pdispIn, lcid, pulOut, VT_UI4, 0);
 }
 
 /************************************************************************
@@ -2248,7 +2249,7 @@ HRESULT WINAPI VarI8FromStr(OLECHAR* str
  */
 HRESULT WINAPI VarI8FromDisp(IDispatch* pdispIn, LCID lcid, LONG64* pi64Out)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pi64Out, VT_I8);
+  return VARIANT_FromDisp(pdispIn, lcid, pi64Out, VT_I8, 0);
 }
 
 /************************************************************************
@@ -2576,7 +2577,7 @@ HRESULT WINAPI VarUI8FromStr(OLECHAR* st
  */
 HRESULT WINAPI VarUI8FromDisp(IDispatch* pdispIn, LCID lcid, ULONG64* pui64Out)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pui64Out, VT_UI8);
+  return VARIANT_FromDisp(pdispIn, lcid, pui64Out, VT_UI8, 0);
 }
 
 /************************************************************************
@@ -2851,7 +2852,7 @@ HRESULT WINAPI VarR4FromStr(OLECHAR* str
  */
 HRESULT WINAPI VarR4FromDisp(IDispatch* pdispIn, LCID lcid, float *pFltOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pFltOut, VT_R4);
+  return VARIANT_FromDisp(pdispIn, lcid, pFltOut, VT_R4, 0);
 }
 
 /************************************************************************
@@ -3172,7 +3173,7 @@ HRESULT WINAPI VarR8FromStr(OLECHAR* str
  */
 HRESULT WINAPI VarR8FromDisp(IDispatch* pdispIn, LCID lcid, double *pDblOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pDblOut, VT_R8);
+  return VARIANT_FromDisp(pdispIn, lcid, pDblOut, VT_R8, 0);
 }
 
 /************************************************************************
@@ -3594,7 +3595,7 @@ HRESULT WINAPI VarCyFromStr(OLECHAR* str
  */
 HRESULT WINAPI VarCyFromDisp(IDispatch* pdispIn, LCID lcid, CY* pCyOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pCyOut, VT_CY);
+  return VARIANT_FromDisp(pdispIn, lcid, pCyOut, VT_CY, 0);
 }
 
 /************************************************************************
@@ -4265,7 +4266,7 @@ HRESULT WINAPI VarDecFromStr(OLECHAR* st
  */
 HRESULT WINAPI VarDecFromDisp(IDispatch* pdispIn, LCID lcid, DECIMAL* pDecOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pDecOut, VT_DECIMAL);
+  return VARIANT_FromDisp(pdispIn, lcid, pDecOut, VT_DECIMAL, 0);
 }
 
 /************************************************************************
@@ -5806,7 +5807,7 @@ VarBoolFromStr_CheckLocalised:
  */
 HRESULT WINAPI VarBoolFromDisp(IDispatch* pdispIn, LCID lcid, VARIANT_BOOL *pBoolOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pBoolOut, VT_BOOL);
+  return VARIANT_FromDisp(pdispIn, lcid, pBoolOut, VT_BOOL, 0);
 }
 
 /************************************************************************
@@ -6544,6 +6545,27 @@ HRESULT WINAPI VarBstrFromUI8(ULONG64 ul
   return VARIANT_BstrFromUInt(ullIn, lcid, dwFlags, pbstrOut);
 }
 
+/************************************************************************
+ * VarBstrFromDisp (OLEAUT32.115)
+ *
+ * Convert a VT_DISPATCH to a BSTR.
+ *
+ * PARAMS
+ *  pdispIn [I] Source
+ *  lcid    [I] LCID for conversion
+ *  dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h")
+ *  pbstrOut  [O] Destination
+ *
+ * RETURNS
+ *  Success: S_OK.
+ *  Failure: E_INVALIDARG, if the source value is invalid
+ *           DISP_E_TYPEMISMATCH, if the type cannot be converted
+ */
+HRESULT WINAPI VarBstrFromDisp(IDispatch* pdispIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut)
+{
+  return VARIANT_FromDisp(pdispIn, lcid, pbstrOut, VT_BSTR, dwFlags);
+}
+
 /**********************************************************************
  * VarBstrCat (OLEAUT32.313)
  *
@@ -6727,7 +6749,7 @@ HRESULT WINAPI VarDateFromR8(double dblI
  */
 HRESULT WINAPI VarDateFromDisp(IDispatch* pdispIn, LCID lcid, DATE* pdateOut)
 {
-  return VARIANT_FromDisp(pdispIn, lcid, pdateOut, VT_DATE);
+  return VARIANT_FromDisp(pdispIn, lcid, pdateOut, VT_DATE, 0);
 }
 
 /******************************************************************************




More information about the wine-cvs mailing list