oleaut32: Added MEMBERID_NIL handling to ICreateTypeInfo_LayOut.

This commit is contained in:
Piotr Caban 2010-02-22 01:58:39 +01:00 committed by Alexandre Julliard
parent 1765229158
commit bf0815424b
2 changed files with 23 additions and 2 deletions

View File

@ -1041,6 +1041,10 @@ static void test_CreateTypeLib(void) {
hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
ok(hres == S_OK, "got %08x\n", hres);
funcdesc.memid = MEMBERID_NIL;
hres = ICreateTypeInfo_AddFuncDesc(createti, 1, &funcdesc);
ok(hres == S_OK, "got %08x\n", hres);
ICreateTypeInfo_Release(createti);
hres = ICreateTypeLib_CreateTypeInfo(createtl, interface1W, TKIND_INTERFACE, &createti);

View File

@ -1994,8 +1994,25 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(
i = 0;
This->typeinfo->cbSizeVft = 0;
for(iter=This->typedata->next->next; iter!=This->typedata->next; iter=iter->next) {
if(iter->indice == MEMBERID_NIL)
FIXME("MEMBERID_NIL handling not yet implemented\n");
/* Assign MEMBERID if MEMBERID_NIL was specified */
if(iter->indice == MEMBERID_NIL) {
iter->indice = 0x60000000 + i;
for(iter2=This->typedata->next->next; iter2!=This->typedata->next; iter2=iter2->next) {
if(iter == iter2) continue;
if(iter2->indice == iter->indice) {
iter->indice = 0x5fffffff + This->typeinfo->cElement + i;
for(iter2=This->typedata->next->next; iter2!=This->typedata->next; iter2=iter2->next) {
if(iter == iter2) continue;
if(iter2->indice == iter->indice)
return E_ACCESSDENIED;
}
break;
}
}
}
typedata[i] = iter;