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
On Thu, Jun 30, 2005 at 03:09:35PM -0500, Alex Villacís Lasso wrote:
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:
I atually fixed avifil32 now, by adding an OleINitialize() to AVIFileInit().
Ciao, Marcus
Marcus Meissner wrote:
On Thu, Jun 30, 2005 at 03:09:35PM -0500, Alex Villacís Lasso wrote:
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:
I atually fixed avifil32 now, by adding an OleINitialize() to AVIFileInit().
You probably don't want OleInitialize as it also creates a lot of other stuff that you don't need like resources for supporting OLE drag-n-drop. Also, why didn't you call the correspoding uninitialize function? I've seen some nasty deadlocks that are caused by not calling CoUninitialize at the right time (with marshaled objects still active).