http://bugs.winehq.org/show_bug.cgi?id=12659
Ralph winebugs@q51.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|-unknown |ole32
--- Comment #10 from Ralph winebugs@q51.org 2009-10-23 18:43:51 --- It's taken me about a year and a half, but I finally had the opportunity to look at this bug again. I was sure Anastasius had already narrowed it down, but I wanted to document my low-tech approach to the problem anyway, in case it gives some ideas to others in a similar situation.
I searched the registry on a Windows system for that GUID (b5f8350b-0548-48b1-a6ee-88bd00b4a5e7) and found a key of that name containing the string "MSAA AccPropServices". It also contained two subkeys, one of which was called "InprocServer32" which in turn contained a reference to "C:\WINDOWS\System32\oleacc.dll".
I tried the same search for that GUID within Wine's registry ... and found nothing. So, I exported the key from the Windows system, and imported it into Wine using Wine's regedit. I wanted to see if that would get me any further the next time I started Acrobat and tried to view the Preferences window. Here's the error that resulted:
------------ err:ole:COMPOBJ_DllList_Add couldn't find function DllGetClassObject in L"oleacc.dll" err:ole:create_server class {b5f8350b-0548-48b1-a6ee-88bd00b4a5e7} not registered fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported err:ole:CoGetClassObject no class object {b5f8350b-0548-48b1-a6ee-88bd00b4a5e7} could be created for context 0x15 ------------
So perhaps it's the DllGetClassObject function (or lack thereof) within oleacc that's causing the problem.
Note: my understanding of what DllGetClassObject is supposed to do and how it does it is very sketchy, so the following may just be an exercise in hilarity.
I downloaded the Wine source and tried implementing a stub DllGetClassObject function within oleacc -- based on similar additions by others to the Wine source -- to see if that would help. (Answer: not really.) I'm not even sure that there really should be a DllGetClassObject function in oleacc.dll. I'm wondering if there's a common DLLGetClassObject function elsewhere that's supposed to be utilized in this situation somehow but isn't ... and then oleacc.dll is left holding the bag, so to speak.
In case it's actually useful, here's what I added to the oleacc.spec file within the source:
------------ @ stdcall -private DllGetClassObject(ptr ptr ptr) ------------
And here's what I added to main.c:
------------ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) { FIXME("(%s %s %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); return CLASS_E_CLASSNOTAVAILABLE; } ------------
Now when I try to access the Preferences window, I see this in the console output:
------------ fixme:oleacc:DllGetClassObject ({b5f8350b-0548-48b1-a6ee-88bd00b4a5e7} {00000001-0000-0000-c000-000000000046} 0x32f7b0) err:ole:apartment_getclassobject DllGetClassObject returned error 0x80040111 err:ole:create_server class {b5f8350b-0548-48b1-a6ee-88bd00b4a5e7} not registered fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported err:ole:CoGetClassObject no class object {b5f8350b-0548-48b1-a6ee-88bd00b4a5e7} could be created for context 0x15 ------------
A search in the registry on a real Windows system for "00000001-0000-0000-c000-000000000046" returns a key (under HKEY_CLASSES_ROOT\Interface) containing the string "IClassFactory". The same thing already exists within Wine's registry.
I'm out of ideas for now. Evidently I've got a heck of a lot of reading to do, unless someone else can offer some further advice.