http://bugs.winehq.org/show_bug.cgi?id=7949 ------- Additional Comments From focht(a)gmx.net 2007-25-04 04:56 ------- Hello, --- quote --- Could you please provide +relay,+atl log? --- quote --- Not necessary, already found it. Caused by a bug in wine ATL AtlInternalQueryInterface() implementation. Getting a patch from following information into git is left to you :) --- snip dlls/atl/atl_main.c --- HRESULT WINAPI AtlInternalQueryInterface(void* this, const _ATL_INTMAP_ENTRY* pEntries, REFIID iid, void** ppvObject) { int i = 0; HRESULT rc = E_NOINTERFACE; TRACE("(%p, %p, %p, %p)\n",this, pEntries, iid, ppvObject); if (IsEqualGUID(iid,&IID_IUnknown)) { TRACE("Returning IUnknown\n"); *ppvObject = this; IUnknown_AddRef((IUnknown*)this); return S_OK; } .... --- snip dlls/atl/atl_main.c --- The code to get the first interface (e.g. client says "give me IUnknown") is wrong. And you should really validate [out] param... --- snip dlls/atl/atl_main.c --- HRESULT WINAPI AtlInternalQueryInterface(void* this, const _ATL_INTMAP_ENTRY* pEntries, REFIID iid, void** ppvObject) { int i = 0; HRESULT rc = E_NOINTERFACE; TRACE("(%p, %p, %p, %p)\n",this, pEntries, iid, ppvObject); if (ppvObject == NULL) return E_POINTER; *ppvObject = NULL; /* first interface (IUnknown) requested by client? */ if (IsEqualGUID(iid,&IID_IUnknown)) { TRACE("Returning IUnknown\n"); *ppvObject = (IUnknown*)((int)this+pEntries->dw); IUnknown_AddRef((IUnknown*)*ppvObject); return S_OK; } ... --- snip dlls/atl/atl_main.c --- Now it works as expected. Though the software crashes later (due to other issues). Regards -- Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is.