Changelog: - IBindCtx::RegisterObjectParam is supposed to replace the old value if the key is already registered Alberto Index: bindctx.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/bindctx.c,v retrieving revision 1.17 diff -u -r1.17 bindctx.c --- bindctx.c 19 Dec 2002 22:16:35 -0000 1.17 +++ bindctx.c 26 Dec 2002 11:27:48 -0000 @@ -371,15 +371,24 @@ ******************************************************************************/ HRESULT WINAPI BindCtxImpl_RegisterObjectParam(IBindCtx* iface,LPOLESTR pszkey, IUnknown* punk) { + DWORD index=0; ICOM_THIS(BindCtxImpl,iface); - TRACE("(%p,%p,%p)\n",This,pszkey,punk); + TRACE("(%p,%s,%p)\n",This,debugstr_w(pszkey),punk); if (punk==NULL) return E_INVALIDARG; IUnknown_AddRef(punk); + if (pszkey!=NULL && BindCtxImpl_GetObjectIndex(This,NULL,pszkey,&index)==S_OK) + { + TRACE("Overwriting existing key\n"); + if(This->bindCtxTable[index].pObj!=NULL) + IUnknown_Release(This->bindCtxTable[index].pObj); + This->bindCtxTable[index].pObj=punk; + return S_OK; + } This->bindCtxTable[This->bindCtxTableLastIndex].pObj = punk; This->bindCtxTable[This->bindCtxTableLastIndex].regType = 1; @@ -422,7 +431,7 @@ DWORD index; ICOM_THIS(BindCtxImpl,iface); - TRACE("(%p,%p,%p)\n",This,pszkey,punk); + TRACE("(%p,%s,%p)\n",This,debugstr_w(pszkey),punk); if (punk==NULL) return E_POINTER; @@ -448,7 +457,7 @@ ICOM_THIS(BindCtxImpl,iface); - TRACE("(%p,%p)\n",This,ppenum); + TRACE("(%p,%s)\n",This,debugstr_w(ppenum)); if (BindCtxImpl_GetObjectIndex(This,NULL,ppenum,&index)==S_FALSE) return E_FAIL; @@ -516,7 +525,7 @@ if (found) return S_OK; - else - return S_FALSE; + TRACE("key not found\n"); + return S_FALSE; } /******************************************************************************