From: Mike Hearn mike@navi.cx
Maybe my 'real' problem is that based upon the logging, I also see a CFProxy Unhandled interface for the first interface that the client is trying to access (but I need to know more about how COM/wine deals with this).
Are you sure you're using COM right? I have also written an outproc server test and it works OK - at least I've been able to marshal a Hello World RPC across.
Well, it seems to work ok on Windows, so there must be something 'ok' about it. Also, I did not write the application myself. I'm just trying to get it run under wine.
I am not sure, but there seems to be a difference in the outproc handling of the CoCreateInstance call?
This goes ok: hr = CoCreateInstance(CLSID_Component1, NULL, clsctx, IID_IX, (void**)&pIX) ;
However this seems to go wrong?: hr = CoCreateInstance(CLSID_Component1, NULL, clsctx, __uuidof(IUnknown), (void**)&pIUnknown); hr = pIUnknown->QueryInterface(IID_IX, (void **)&pIX);
Summary: If you perform a CoCreateInstance for IUnknown (outproc), you get back the classfactory instead of the proxy to the object itself?
Maybe you can check this behaviour? (I don't know exactly if this is indeed what seems to wrong or that I might have made a mistake with the simple test program).
Me and Rob are starting to scrape together a plan, I think, and as part of working on other apps we're fixing bits as we go, but it's a long long road we have ahead of us. Any help would certainly be welcome.
Well, I'm trying get this application running with wine, I don't know what else I might walk into, but I surely hope to do some contributions to wine in the process. --- Jeroen Janssen
Jeroen Janssen wrote:
I am not sure, but there seems to be a difference in the outproc handling of the CoCreateInstance call?
This goes ok: hr = CoCreateInstance(CLSID_Component1, NULL, clsctx, IID_IX, (void**)&pIX) ;
However this seems to go wrong?: hr = CoCreateInstance(CLSID_Component1, NULL, clsctx, __uuidof(IUnknown), (void**)&pIUnknown); hr = pIUnknown->QueryInterface(IID_IX, (void **)&pIX);
Summary: If you perform a CoCreateInstance for IUnknown (outproc), you get back the classfactory instead of the proxy to the object itself?
If you look at the code for CoCreateInstance you will see that it is completely agnostic to the context it is being used for. If what you say were true then every COM program on Wine would be broken (and that isn't true).
Maybe you can check this behaviour? (I don't know exactly if this is indeed what seems to wrong or that I might have made a mistake with the simple test program).
Sure. If you let me know what program this is then it would be even better.
Me and Rob are starting to scrape together a plan, I think, and as part of working on other apps we're fixing bits as we go, but it's a long long road we have ahead of us. Any help would certainly be welcome.
Well, I'm trying get this application running with wine, I don't know what else I might walk into, but I surely hope to do some contributions to wine in the process.
Unfortunately, you have stumbled into one of the most confusing areas of the Win32 API that I think only one person in the world fully understands (Don Box in case you are wondering). I do hope that you will make some contributions to Wine in the future.
Rob
On Thu, 22 Jul 2004 17:38:43 +0100, Robert Shearman wrote:
Unfortunately, you have stumbled into one of the most confusing areas of the Win32 API that I think only one person in the world fully understands (Don Box in case you are wondering).
Yeah. I'm starting to suspect that Don kept piling crap into COM until even he didn't understand it, and then said "screw that, let's start again with .NET", hence all the MarshalByRefObject stuff there. Side-note: bizarrely due to HTTP being a tier-1 RPC channel in .NET there's no way to know if a .NET remoting connection drops without pinging it yourself. Now they're scrapping that and working on "Indigo". Are Microsoft forever doomed to reinvent DCOM over and over?