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