Piotr Caban : propsys: Added InitVariantFromGUIDAsString implementation.

Alexandre Julliard julliard at winehq.org
Fri Sep 16 13:28:31 CDT 2011


Module: wine
Branch: master
Commit: 27ac89acbca16531da3af4e021cba54623f85374
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=27ac89acbca16531da3af4e021cba54623f85374

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Fri Sep 16 11:20:07 2011 +0200

propsys: Added InitVariantFromGUIDAsString implementation.

---

 dlls/propsys/Makefile.in  |    1 +
 dlls/propsys/propsys.spec |    4 +-
 dlls/propsys/propvar.c    |   46 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 49 insertions(+), 2 deletions(-)

diff --git a/dlls/propsys/Makefile.in b/dlls/propsys/Makefile.in
index ae2d91f..1cbbe7c 100644
--- a/dlls/propsys/Makefile.in
+++ b/dlls/propsys/Makefile.in
@@ -1,5 +1,6 @@
 MODULE    = propsys.dll
 IMPORTLIB = propsys
+IMPORTS   = ole32 oleaut32
 
 C_SRCS = \
 	propsys_main.c \
diff --git a/dlls/propsys/propsys.spec b/dlls/propsys/propsys.spec
index 3726fac..e738985 100644
--- a/dlls/propsys/propsys.spec
+++ b/dlls/propsys/propsys.spec
@@ -33,7 +33,7 @@
 @ stub InitPropVariantFromDoubleVector
 @ stub InitPropVariantFromFileTime
 @ stub InitPropVariantFromFileTimeVector
-@ stub InitPropVariantFromGUIDAsString
+@ stdcall InitPropVariantFromGUIDAsString(ptr ptr)
 @ stub InitPropVariantFromInt16Vector
 @ stub InitPropVariantFromInt32Vector
 @ stub InitPropVariantFromInt64Vector
@@ -51,7 +51,7 @@
 @ stub InitVariantFromDoubleArray
 @ stub InitVariantFromFileTime
 @ stub InitVariantFromFileTimeArray
-@ stub InitVariantFromGUIDAsString
+@ stdcall InitVariantFromGUIDAsString(ptr ptr)
 @ stub InitVariantFromInt16Array
 @ stub InitVariantFromInt32Array
 @ stub InitVariantFromInt64Array
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index cdfb89f..d59173c 100644
--- a/dlls/propsys/propvar.c
+++ b/dlls/propsys/propvar.c
@@ -32,6 +32,7 @@
 #include "propvarutil.h"
 
 #include "wine/debug.h"
+#include "wine/unicode.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(propsys);
 
@@ -86,3 +87,48 @@ HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT p
 
     return E_FAIL;
 }
+
+static void PROPVAR_GUIDToWSTR(REFGUID guid, WCHAR *str)
+{
+    static const WCHAR format[] = {'{','%','0','8','X','-','%','0','4','X','-','%','0','4','X',
+        '-','%','0','2','X','%','0','2','X','-','%','0','2','X','%','0','2','X','%','0','2','X',
+        '%','0','2','X','%','0','2','X','%','0','2','X','}',0};
+
+    sprintfW(str, format, guid->Data1, guid->Data2, guid->Data3,
+            guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
+            guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]);
+}
+
+HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar)
+{
+    TRACE("(%p %p)\n", guid, ppropvar);
+
+    if(!guid)
+        return E_FAIL;
+
+    ppropvar->vt = VT_LPWSTR;
+    ppropvar->u.pwszVal = CoTaskMemAlloc(39*sizeof(WCHAR));
+    if(!ppropvar->u.pwszVal)
+        return E_OUTOFMEMORY;
+
+    PROPVAR_GUIDToWSTR(guid, ppropvar->u.pwszVal);
+    return S_OK;
+}
+
+HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar)
+{
+    TRACE("(%p %p)\n", guid, pvar);
+
+    if(!guid) {
+        FIXME("guid == NULL\n");
+        return E_FAIL;
+    }
+
+    V_VT(pvar) = VT_BSTR;
+    V_BSTR(pvar) = SysAllocStringLen(NULL, 38);
+    if(!V_BSTR(pvar))
+        return E_OUTOFMEMORY;
+
+    PROPVAR_GUIDToWSTR(guid, V_BSTR(pvar));
+    return S_OK;
+}




More information about the wine-cvs mailing list