Hi, VT_USERDEFINED in turn can contain any 'normal' type, so serialize/deserialize all types. Spotted by Excel Macro Recorder. Ciao, Marcus Changelog: Serialize/deserialize all reftypes in VT_USERDEFINED. Index: tmarshal.c =================================================================== RCS file: /home/wine/wine/dlls/oleaut32/tmarshal.c,v retrieving revision 1.11 diff -u -u -r1.11 tmarshal.c --- tmarshal.c 5 Dec 2002 20:33:08 -0000 1.11 +++ tmarshal.c 11 Dec 2002 14:48:23 -0000 @@ -556,11 +556,25 @@ if (debugout) MESSAGE("}"); break; } - default: - FIXME("Don't know how to marshal type kind %d\n",tattr->typekind); - hres = E_FAIL; + default: { + TYPEDESC tdesc2; + + if (debugout) MESSAGE("U{"); + memset(&tdesc2,0,sizeof(tdesc2)); + tdesc2.vt = tattr->typekind; + hres = serialize_param( + tinfo2, + writeit, + debugout, + dealloc, + &tdesc2, + arg, + buf + ); + if (debugout) MESSAGE("}"); break; } + } ITypeInfo_Release(tinfo2); return hres; } @@ -896,10 +910,24 @@ if (debugout) MESSAGE("}"); break; } - default: - FIXME("Don't know how to marshal type kind %d\n",tattr->typekind); - hres = E_FAIL; + default: { + TYPEDESC tdesc2; + + if (debugout) MESSAGE("U{"); + memset(&tdesc2,0,sizeof(tdesc2)); + tdesc2.vt = tattr->typekind; + hres = deserialize_param( + tinfo2, + readit, + debugout, + alloc, + &tdesc2, + (DWORD*)*arg, + buf + ); + if (debugout) MESSAGE("}"); break; + } } } if (hres)