diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c index 077c59c9c547b8c5ce1be09f96923c46746864d9..ca414867ef1245d8d37e39b8ba68097947f0bede 100644 --- a/dlls/oleaut32/tests/typelib.c +++ b/dlls/oleaut32/tests/typelib.c @@ -1722,8 +1722,7 @@ static void test_CreateTypeLib(void) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 0, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine ok(pfuncdesc->oVft == 12 || - broken(pfuncdesc->oVft == 24) /* xp64 */, + ok(pfuncdesc->oVft == 12 || broken(pfuncdesc->oVft == 24) /* xp64 */, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_BSTR, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); @@ -1783,8 +1782,7 @@ static void test_CreateTypeLib(void) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine ok(pfuncdesc->oVft == 16 || - broken(pfuncdesc->oVft == 28) /* xp64 */, + ok(pfuncdesc->oVft == 16 || broken(pfuncdesc->oVft == 28) /* xp64 */, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); @@ -1825,8 +1823,7 @@ static void test_CreateTypeLib(void) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 0, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine ok(pfuncdesc->oVft == 16 || - broken(pfuncdesc->oVft == 28), /* xp64 */ + ok(pfuncdesc->oVft == 16 || broken(pfuncdesc->oVft == 28), /* xp64 */ "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); @@ -1857,8 +1854,7 @@ static void test_CreateTypeLib(void) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine ok(pfuncdesc->oVft == 28 || - broken(pfuncdesc->oVft == 40) /* xp64 */, + ok(pfuncdesc->oVft == 28 || broken(pfuncdesc->oVft == 40) /* xp64 */, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); @@ -1890,8 +1886,7 @@ static void test_CreateTypeLib(void) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine ok(pfuncdesc->oVft == 28 || - broken(pfuncdesc->oVft == 40) /* xp64 */, + ok(pfuncdesc->oVft == 28 || broken(pfuncdesc->oVft == 40) /* xp64 */, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); @@ -1927,8 +1922,7 @@ static void test_CreateTypeLib(void) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine ok(pfuncdesc->oVft == 24 || - broken(pfuncdesc->oVft == 36) /* xp64 */, + ok(pfuncdesc->oVft == 24 || broken(pfuncdesc->oVft == 36) /* xp64 */, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); @@ -1969,8 +1963,7 @@ static void test_CreateTypeLib(void) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 2, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine ok(pfuncdesc->oVft == 24 || - broken(pfuncdesc->oVft == 36) /* xp64 */, + ok(pfuncdesc->oVft == 24 || broken(pfuncdesc->oVft == 36) /* xp64 */, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); @@ -2021,8 +2014,7 @@ static void test_CreateTypeLib(void) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 2, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine ok(pfuncdesc->oVft == 24 || - broken(pfuncdesc->oVft == 36) /* xp64 */, + ok(pfuncdesc->oVft == 24 || broken(pfuncdesc->oVft == 36) /* xp64 */, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); @@ -2078,8 +2070,7 @@ static void test_CreateTypeLib(void) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine ok(pfuncdesc->oVft == 32 || - broken(pfuncdesc->oVft == 44), /* xp64 */ + ok(pfuncdesc->oVft == 32 || broken(pfuncdesc->oVft == 44), /* xp64 */ "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); @@ -2179,6 +2170,29 @@ static void test_CreateTypeLib(void) { funcdesc.oVft = 0xaaa8; hres = ICreateTypeInfo_AddFuncDesc(createti, 0, &funcdesc); ok(hres == S_OK, "got %08x\n", hres); + + hres = ICreateTypeInfo_QueryInterface(createti, &IID_ITypeInfo, (void**)&ti2); + ok(hres == S_OK, "got %08x\n", hres); + + hres = ITypeInfo2_GetFuncDesc(ti2, 0, &pfuncdesc); + ok(hres == S_OK, "got %08x\n", hres); + + ok(pfuncdesc->memid == 0x60020000, "got %x\n", pfuncdesc->memid); + ok(pfuncdesc->lprgscode == NULL, "got %p\n", pfuncdesc->lprgscode); + ok(pfuncdesc->lprgelemdescParam != NULL, "got %p\n", pfuncdesc->lprgelemdescParam); + ok(pfuncdesc->funckind == FUNC_PUREVIRTUAL, "got 0x%x\n", pfuncdesc->funckind); + ok(pfuncdesc->invkind == INVOKE_FUNC, "got 0x%x\n", pfuncdesc->invkind); + ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); + ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); + ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); + ok(pfuncdesc->oVft == (short)0xaaa8, "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); + ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); + ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); + + ITypeInfo2_ReleaseFuncDesc(ti2, pfuncdesc); + ITypeInfo2_Release(ti2); + funcdesc.oVft = 0; ICreateTypeInfo_Release(createti); diff --git a/dlls/oleaut32/typelib2.c b/dlls/oleaut32/typelib2.c index 354ec8a07cbda1618201900499d1f0bd8c1deb51..f3d742de2aa161cd339da0509843cfe8cc913952 100644 --- a/dlls/oleaut32/typelib2.c +++ b/dlls/oleaut32/typelib2.c @@ -3295,9 +3295,7 @@ static HRESULT WINAPI ITypeInfo2_fnGetFuncDesc( (*ppFuncDesc)->callconv = (typedata[4] >> 8) & 0xF; (*ppFuncDesc)->cParams = typedata[5]; (*ppFuncDesc)->cParamsOpt = 0; /* FIXME: Unimplemented*/ - (*ppFuncDesc)->oVft = typedata[3] & 0xFFFF; - if ((*ppFuncDesc)->oVft) - --(*ppFuncDesc)->oVft; + (*ppFuncDesc)->oVft = typedata[3] & 0xFFFC; (*ppFuncDesc)->cScodes = 0; /* FIXME: Unimplemented*/ hres = ctl2_decode_typedesc(This->typelib, typedata[1], &(*ppFuncDesc)->elemdescFunc.tdesc);