iTunes COM problems?

Rob Shearman rob at codeweavers.com
Sat Dec 3 20:28:24 CST 2005


Thomas Meyer wrote:

>Hi.
>
>iTunes version 6 installation fails. i made a log an my guess is that the problem is here:
>
>[snip]
>trace:ole:TMStubImpl_AddRef (0x7fdcd028)->(ref before=1)
>trace:ole:stub_manager_int_release after 1
>trace:ole:dispatch_rpc Calling apartment thread 0x0000000b...
>trace:ole:CoWaitForMultipleHandles received message whilst waiting for RPC: 0x0400
>trace:ole:TMStubImpl_Invoke ...
>trace:ole:ITypeLib2_fnAddRef (0x7fd8a348)->ref was 9
>trace:ole:ITypeInfo_fnAddRef (0x7fdc8b30)->ref is 3
>trace:ole:ITypeInfo_fnGetFuncDesc (0x7fdc8b30) index 0
>trace:ole:ITypeInfo_fnGetFuncDesc (0x7fdc8b30) index 1
>trace:ole:ITypeInfo_fnGetDocumentation (0x7fdc8b30) memid -1 Name(0x7fbda55c) DocString((nil)) HelpContext((nil)) HelpFile((nil))
>trace:ole:ITypeInfo_fnGetNames (0x7fdc8b30) memid=0x60010001 Maxname=10
>trace:ole:deserialize_param vt 3 at 0x7fdd193c
>trace:ole:_invoke Calling 0x4136dc(7ced8370,0000005f,)
>trace:ole:_invoke returns 00000000
>trace:ole:serialize_param (tdesc.vt 3)
>trace:ole:ITypeInfo_fnRelease (0x7fdc8b30)->(2)
>trace:ole:ITypeLib2_fnRelease (0x7fd8a348)->(9)
>trace:ole:TMStubImpl_Invoke returning
>trace:ole:TMStubImpl_Release (0x7fdcd028)->(ref before=2)
>trace:ole:apartment_release a0000000b: after = 1
>trace:ole:rpc_sendreceive_thread completed with status 0x0
>trace:ole:DllMain 0x7f6e0000 0x3 (nil) ole32.dll
>trace:ole:CoWaitForMultipleHandles -- 0x00000000
>trace:ole:RpcChannelBuffer_SendReceive RPC call status: 0x0
>trace:ole:RpcChannelBuffer_SendReceive -- 0x00000000
>trace:ole:ITypeInfo_fnRelease (0x7fe2e6f0)->(2)
>trace:ole:ITypeLib2_fnRelease (0x7fdf4758)->(201)
>
>Ok. One of the things i did't figured out till now. What does this xCall thing mean?
>
>trace:ole:xCall -- 0x00000000
>trace:ole:CoMarshalInterface (0x775af1b8, {c9ce9778-210c-4cb4-b4f0-f589c3dda00b}, 0x7ce45480, 3, (nil), MSHLFLAGS_TABLESTRONG)
>trace:ole:CoGetStandardMarshal ({c9ce9778-210c-4cb4-b4f0-f589c3dda00b},0x7ce45480,3,(nil),1,0x7fbde72c)
>trace:ole:CoMarshalInterface Using standard marshaling
>trace:ole:CoMarshalInterface Calling IMarshal::MarshalInterace
>trace:ole:StdMarshalImpl_MarshalInterface (...,{c9ce9778-210c-4cb4-b4f0-f589c3dda00b},...)
>trace:ole:CoGetPSClsid () riid={c9ce9778-210c-4cb4-b4f0-f589c3dda00b}, pclsid=0x7fbde654
>trace:ole:WINE_StringFromCLSID 0x496980->{C9CE9778-210C-4CB4-B4F0-F589C3DDA00B}
>trace:ole:__CLSIDFromStringA {C9CE9778-210C-4CB4-B4F0-F589C3DDA00B} -> 0x7fbde654
>trace:ole:CoGetPSClsid () Returning CLSID={c9ce9778-210c-4cb4-b4f0-f589c3dda00b}
>
>trace:ole:get_facbuf_for_iid CoGetPSClsid hr= 0x00000000
>trace:ole:CoGetClassObject 
>	CLSID:	{c9ce9778-210c-4cb4-b4f0-f589c3dda00b},
>	IID:	{d5f569d0-593b-101a-b569-08002b2dbf7a}
>trace:ole:WINE_StringFromCLSID 0x7fbde654->{C9CE9778-210C-4CB4-B4F0-F589C3DDA00B}
>trace:ole:COMPOBJ_DLLList_Add 
>trace:ole:get_inproc_class_object DllGetClassObject hr= 0x80040111
>
>err:ole:CoGetClassObject no class object {c9ce9778-210c-4cb4-b4f0-f589c3dda00b} could be created for for context 0x1
>err:ole:marshal_object couldn't get IPSFactory buffer for interface {c9ce9778-210c-4cb4-b4f0-f589c3dda00b}
>
>I guess this is the reason why the installer fails. Maybe i am wrong and this is an error in the application program. but how to determin this?
>  
>

Yes, this is likely the reason. Let me guess, you are trying with a 
version of Wine that is more than a week old? Have you tried with the 
current CVS?

>is there a way to explorer all interfaces in an COM object (in the dll file)?
>  
>

Not really. One way may be to disassemble the DllGetClassObject 
function, but that would be more trouble than it's worth.

>err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80040111
>err:ole:CoMarshalInterface Failed to marshal the interface {c9ce9778-210c-4cb4-b4f0-f589c3dda00b}, 80040111
>trace:ole:CoMarshalInterface completed with hr 0x80040111
>  
>
<snip>

>by the way: what is an apartment? (i think it has something to do with thread/process, therefore i added the dll names for each Main call)
>  
>

It is a unit in which COM objects are valid and is equal to or larger 
than a thread, but smaller than or equal to a process. In practical 
terms, it means that when you uninitialize an apartment all of the COM 
objects that it exports are released and can no longer be accessed, and 
similarly proxies to remote objects are invalidated and just return 
RPC_E_DISCONNECTED.

Hope this helps,
Rob



More information about the wine-devel mailing list