Module: wine Branch: master Commit: cd9bbd64e8030e1ec8a87f5105f52cfdbcdc1108 URL: http://source.winehq.org/git/wine.git/?a=commit;h=cd9bbd64e8030e1ec8a87f5105...
Author: Piotr Caban piotr@codeweavers.com Date: Tue Apr 9 12:12:20 2013 +0200
oleaut32: Fixed setting oVft value in ITypeInfo2::GetFuncDesc.
---
dlls/oleaut32/tests/typelib.c | 50 ++++++++++++++++++++++++++-------------- dlls/oleaut32/typelib2.c | 4 +-- 2 files changed, 33 insertions(+), 21 deletions(-)
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c index 077c59c..ca414867 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 354ec8a..f3d742d 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);