out-of-process COM design

Mike Hearn mike at navi.cx
Sat Dec 18 07:45:44 CST 2004


On Sat, 2004-12-18 at 13:13 +0000, Robert Shearman wrote:
> That patch is very hackish and needlessly complicated. This patch 
> accomplishes the same task in fewer lines (note that this is not the 
> best solution for the problem, I am working on that):
> 
> Index: compobj.c
> ===================================================================
> RCS file: /home/wine/wine/dlls/ole32/compobj.c,v
> retrieving revision 1.113
> diff -u -p -r1.113 compobj.c
> --- compobj.c   14 Dec 2004 15:28:58 -0000      1.113
> +++ compobj.c   18 Dec 2004 13:58:03 -0000
> @@ -1107,6 +1107,8 @@ _LocalServerThread(LPVOID param) {
> 
>      TRACE("Starting threader for 
> %s.\n",debugstr_guid(&newClass->classIdentifier));
> 
> +    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
> +
>      strcpy(pipefn,PIPEPREF);
>      
> WINE_StringFromCLSID(&newClass->classIdentifier,pipefn+strlen
> (PIPEPREF));

That doesn't look right, it'll create a new apartment instead of using
the one that the program itself created. I don't think we should be
creating new apartments that don't correspond to anything the app did,
Win32 generally expects the API user to do it manually. It'll make the
code more confusing, especially once thread affinity is implemented.




More information about the wine-devel mailing list