Cross-Machine COM-Calls under Wine... (RePost from wine.user)
sss at online.de
Wed Feb 22 03:01:16 CST 2006
are working here, using our own implementation of a COM-based
RPC-Server. Its speciality is the hosting of COM-Binaries, that
don't have to be registered, to instantiate Classes and invoke Methods
If you want to test a Server/Client-Pair - here's our free Download:
For a successful test under Wine, you have to Install
the Redistributables of an actual VB6-Runtime
and some ADO-Distributable >=2.5 first.
I've tested the whole thing under a Debian-Sid with a somewhat
older Kernel (2.6.9), but with a new "apt-getted" Wine-Version
(0.97). The Installation of the VB6-Runtime and the ADO-Redist
was not possible, until I figured out, that a prior install of IE6 was
helpful, to install the two above mentioned packages.
After installing these prerequisites, I removed the IE6-ProgramFolder,
unpacked our ZIP to c:\dh_RPC, started the Server and the Client -
eh voilà - all was working fine (Linux->Linux and XP->Linux).
The complete set of COM-DemoCalls was working "OutOfTheBox",
even the "Disconnected ADO-Recordset"-Call was successful.
(For the Linuxers, that are serialized DB-Resultsets, wich are often
used in distributed COM-Scenarios).
No Memory-Leaking, even under Stress (the server was able, to
deliver max. 700 small COMRequsest per second, stressed from
multiple Clients (XP-Box, comparable Hardware, reached ca. 2000). So
Wine has ca. 3 times the Call-Overhead, regarding Object-Instantiation
and Method-Invoking-By-Name. But the more realistic Recordset-Call
was finished after 14ms, where the XP-Box needed 9ms - so for realistic
Calls, we now see only factor 1.5 under Wine. And in the "Large-String-
Reflection-Test" (2MB Up- and 4MB-Download) - Wine was a little bit
faster than XP - good job, regarding your socket-bindings.
Minimizing to the "KDE-SysTray", all was working; I was impressed.
Now the bad news: ;-)
Not working was:
1. Running as Service (Service-Registering was successful, but ...)
(Ok, no big problem, running as UserProcess was working, but
are there plans, to simulate the Win-ServiceControlmanager?)
2. Win-Authentication and -Impersonation
(LogonUser- and ImpersonateLoggedOnUser-APIs - already mapped to...?)
3. "Global ServerSingletons" using ROT-Entries with FileMoniker-Binding
4. "RPCServer-internal Singletons" (CoMarshalInterThreadInterfaceInStream
and CoGetInterfaceAndReleaseStream against the IUnknown-Interface).
Any Ideas, especially for 3. and 4.?--> a good working X-Process-,
respective X-Thread-Marshaling would be important, to take COM-
Hosting under Linux/Wine seriously into account.
My attempts, to get any useful information per WineDebug were not
It would be great, if anybody with more "Wine-Debugging-Experience"
could look at the appropriate Calls using our free Server-Download.
P.S. As Dan Kegel has recommended in 'wine.user', I will try to isolate
the Problems 3. und 4. in separate Binaries and post a link later.
More information about the wine-devel