COM outproc & CFProxy unhandled interface for IRunnableObject

Robert Shearman rob at codeweavers.com
Fri Jul 23 11:21:37 CDT 2004


Jeroen Janssen wrote:

> Robert Shearman wrote:
>
>> Jeroen Janssen wrote:
>>
>>> Hello,
>>>
>>> I'm mailing the both of you with a small (com) example attached.
>>>
>>> It is a client/server/proxystub example (with binaries), so you need to
>>> /RegServer the server and regsvr32 the proxy.
>>>
>>> Now I first manually start the server in a seperate console and then I
>>> manually start the client.
>>>
>>> I modified the client to look for input, so there are basically two 
>>> paths
>>> in the client:
>>>
>>> * you press: 1 <enter>; the normal path, goes OK
>>>  hr =
>>> CoCreateInstance(CLSID_Calculate,NULL,CLSCTX_LOCAL_SERVER,IID_ICalculate,(void**) 
>>>
>>> &pICalculate);
>>>
>>> * you press: 2 (or something else) <enter>; the other path, FAILURE
>>> hr =
>>> CoCreateInstance(CLSID_Calculate,NULL,CLSCTX_LOCAL_SERVER,IID_IUnknown,(void**) 
>>>
>>> &pIUnknown);
>>> hr = pIUnknown->QueryInterface(IID_ICalculate, (void **) &pICalculate);
>>>
>>> Now either there is something wrong with my sample, or there is 
>>> something
>>> wrong in wine that causes this to fail.
>>>
>>> Can you verify that the client code path is ok (the very few above
>>> mentioned lines that differentiate in scenario 1,2). If the client 
>>> code is
>>> ok, then any idea what is actually causing the problem? 
>>
>>
>>
>> Yes, I can see the problem. What happens with native OLE is that the 
>> IUnknown part of the object is handled by the proxy manager. What 
>> this basically means is that it is translated into IRemUnknown 
>> (remote unknown) calls that will do the appropriate thing. However, 
>> this is currently not implemented on Wine.
>> I'm not sure we (Mike and I) will have time to properly implement 
>> this, but I could maybe write a quick hack for you sometime over the 
>> weekend.
>
>
> Ok, thanks for this explanation (that explains why this is not working 
> yet on wine).

>
> I had a short look at the 'world of com' patch, and it looks like 
> there is something in there that implements the IRemUnknown stuff. Is 
> there any easy way to determine if/how this can be 'ported' to the 
> current wine?


As Mike said, some of it is usable and some of it isn't. Try applying 
the patch, but YMMV - I ran the patch for a while and it seemed to cause 
more problems than it solved, particularly in IE.
In particular, I don't think the IRemUnknown stuff will be merged as is, 
because I think the way it is implemented in the patch is not the way it 
is implemented in Windows (there is only one IRemUnkown interface per 
apartment) and we only want to write this code once!

Rob




More information about the wine-devel mailing list