Update -- Oleaut32 and VB5

Marcus Meissner marcus at jet.franken.de
Sat May 17 03:08:23 CDT 2003


On Wed, May 07, 2003 at 03:15:59PM +0200, erwin wolff wrote:
> --update for previous message
> 
> While visual Basic can install and start and edit a project,
> it cannot compile with a fake native configuration. The error from
> winedbg:
> 
> { __wine_unimplemented("SafeArrayCreateEx"); }
> 
> This is too bad :(. But hey, At least the VB5 IDE runs perfectly!

Can you try this patch and report how it works?

Ciao, Marcus

Index: oleaut32.spec
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/oleaut32.spec,v
retrieving revision 1.54
diff -u -r1.54 oleaut32.spec
--- oleaut32.spec	15 May 2003 22:58:48 -0000	1.54
+++ oleaut32.spec	17 May 2003 08:01:26 -0000
@@ -39,7 +39,7 @@
 39 stdcall SafeArrayDestroyData(ptr)
 40 stdcall SafeArrayRedim(ptr ptr)
 41 stdcall SafeArrayAllocDescriptorEx(long long ptr)
-42 stub SafeArrayCreateEx
+42 stdcall SafeArrayCreateEx(long long ptr ptr)
 43 stub SafeArrayCreateVectorEx
 44 stdcall SafeArraySetRecordInfo(ptr ptr)
 45 stdcall SafeArrayGetRecordInfo(ptr ptr)
Index: safearray.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/safearray.c,v
retrieving revision 1.23
diff -u -r1.23 safearray.c
--- safearray.c	23 Jan 2003 21:32:36 -0000	1.23
+++ safearray.c	17 May 2003 08:01:27 -0000
@@ -253,10 +253,11 @@
  *		SafeArrayCreate (OLEAUT32.15)
  * Create a SafeArray object by encapsulating AllocDescriptor and AllocData
  */
-SAFEARRAY* WINAPI SafeArrayCreate(
+SAFEARRAY* WINAPI SafeArrayCreateEx(
   VARTYPE        vt,
   UINT         cDims,
-  SAFEARRAYBOUND *rgsabound)
+  SAFEARRAYBOUND *rgsabound,
+  PVOID		pvExtra)
 {
   SAFEARRAY *psa;
   HRESULT   hRes;
@@ -280,6 +281,21 @@
   case VT_VARIANT:   psa->fFeatures |= FADF_VARIANT;break;
   default: break;
   }
+  if (pvExtra) {
+    switch (vt) {
+    case VT_UNKNOWN:
+    case VT_DISPATCH:
+      psa->fFeatures |= FADF_HAVEIID;
+      SafeArraySetIID(psa, (REFIID)pvExtra);
+      break;
+    case VT_RECORD:
+      psa->fFeatures |= FADF_RECORD;
+      SafeArraySetRecordInfo(psa, (IRecordInfo*)pvExtra);
+      break;
+    default: /* vartype is already set bu allocdescriptorex */
+      break;
+    }
+  }
   psa->cLocks    = 0;
   psa->pvData    = NULL;
   psa->cbElements= VARTYPE_SIZE[vt];
@@ -298,6 +314,18 @@
   }
 
   return(psa);
+}
+
+/*************************************************************************
+ *		SafeArrayCreate (OLEAUT32.15)
+ * Create a SafeArray object by encapsulating AllocDescriptor and AllocData
+ */
+SAFEARRAY* WINAPI SafeArrayCreate(
+  VARTYPE	vt,
+  UINT		cDims,
+  SAFEARRAYBOUND *rgsabound
+) {
+  return SafeArrayCreateEx(vt, cDims, rgsabound, NULL);
 }
 
 /*************************************************************************



More information about the wine-devel mailing list