It worked in the past. When pclsidHandler is set to
NULL it performs
a registry lookup as the native version does it. If these registry
entries are missing it has a problem and could perhaps return the
mentioned error - don't know as I have never tested it.
In the past these informations were part of the default registry of
wine but with the addition of the self-registration of many libraries
this has been removed. Don't ask me how to get the library to
register itself - guess it has to do with regsrv32.exe, but I am not
sure. I am already too long out of the substance.
Based on a certain verification in the source code, I made aviinfo to
work by adding the following to the registry:
[Software\\Classes\\CLSID\\{00020000-0000-0000-C000-000000000046}\\InProcServer32]
1110571609
@="avifil32.dll"
"LoadWithoutCOM"=dword:00000000
As far as I can see, the key "LoadWithoutCOM" only needs to exist; it
does not need to be set to any particular value. The aviplay program has
yet to work because the 128x128 AVI file I was using for the test in one
machine (apparently) mandates a 128x128 screen resolution which is (yet)
unsupported by my X configuration, and the ideal 640x480 test AVI is on
the other (currently inaccessible) machine:
trace:x11settings:X11DRV_Settings_AddOneMode initialized mode 128:
320x240x16 @60 Hz (XRandR)
trace:x11settings:X11DRV_Settings_AddOneMode initialized mode 129:
360x200x16 @85 Hz (XRandR)
trace:x11settings:X11DRV_Settings_AddOneMode initialized mode 130:
320x200x16 @85 Hz (XRandR)
trace:x11settings:X11DRV_Settings_AddOneMode initialized mode 131:
320x175x16 @85 Hz (XRandR)
trace:x11settings:X11DRV_Settings_CreateDriver Setting up display
settings for DDRAW (XRandR)
fixme:avifile:AVIFileInit (): stub!
[Stream 0: vids.cvid, cineapk.avi v�eo #0]
trace:x11settings:X11DRV_ChangeDisplaySettingsExW
((null),0x707bf768,(nil),0x00000004,(nil))
trace:x11settings:X11DRV_ChangeDisplaySettingsExW flags=FULLSCREEN
trace:x11settings:X11DRV_ChangeDisplaySettingsExW
DM_fields=BITSPERPEL,PELSWIDTH,PELSHEIGHT
trace:x11settings:X11DRV_ChangeDisplaySettingsExW width=128 height=128
bpp=24 freq=1887172668 (XRandR)
err:x11settings:X11DRV_ChangeDisplaySettingsExW No matching mode found!
(XRandR)
ddraw.SetDisplayMode: 0x88760078 (change resolution!)
But this raises the following questions:
* Why is not avifil32.dll adding this key on registration by regsvr32?
(I could submit a patch to do it, but see next questions)
* Is this the correct usage of avifil32.dll? The loading of this dll
occurs via SHCoCreateInstance in shell32/shellole.c, and the comment on
the usage of the LoadWithoutCOM key goes like this:
//* if a special registry key is set, we load a shell extension without help of OLE32
*//
bLoadWithoutCOM = (ERROR_SUCCESS == SHQueryValueExW(hKey, sLoadWithoutCOM, 0, 0, 0,
0));
Is this the correct (or even supported) usage for avifil32.dll? This
LoadWithoutCOM kludge does not appear anywhere else in my registry, and
it looks like it is intended for shell extensions only. What is the
meaning of "shell extension" here? Does avifil32.dll qualify? (I think
not, because avifil32 is concerned with AVI file handling, not with user
interface. However, I might be wrong.)
The last thing I want is to submit a patch, only to be rejected because
it attempts to use a DLL in a way not intended by its design. So, is
this approach correct (adding LoadWithoutCOM as part or regsvr32
initialization of avifil32.dll), or should an apartment actually be
initialized in full COM style? Do you know if LoadWithoutCOM is used
anywhere else in Wine?
Alex Villacís Lasso