In Wine, you get a popup if your program tries to load a WebBrowser control.
That popup asks you if you want to download the Mozilla control. This is
implemented in shdocvw.dll. Since we use the same code in ReactOS, I
expected to get the same popup, but it doesn't show, instead ibrowser (as an
example of an app that tries to load a WebBrowser control) just says "Sorry
- no web browser control could be loaded".
The reason that it doesn't work the same as in Wine is that the
DllRegisterServer() procedure of shdocvw.dll is never called during setup.
If you manually register shdocvw.dll ("regsvr32 shdocvw.dll") you do get the
popup.
There are 2 ways to fix this: we could hack it and add the registry entries
(class registration) to hivecls.inf, or we can properly implement DLL
registration during (second stage) setup. Although I don't mind cutting a
corner every now and then, in this case my preference is to implement DLL
registration during setup.
That means we'll need an .inf file to describe which DLLs need to be
registered. Windows has a syssetup.inf file for this, with a
[OleControlDlls] section listing the DLLs to register/install. We can of
course manually maintain a syssetup.inf file in bootdata, but this means one
more file to keep up to date when you add a module. So I was thinking, maybe
we could add an 'autoregister="R"' (indicating setup should call
DllRegisterServer(), "I" to indicate it should call DllInstall() and
"B" to
indicate it should call both) attribute to <module> in the .xml file. Then
rbuild should be able to automatically generate a syssetup.inf file. We
could go one step further and also generate the
bootdata/packages/reactos.dff file in a similar way.
So, does this sound like the correct approach? If so, would anyone be
interested in implementing the rbuild side of things? I can take care of the
stuff that needs to be done during setup, but I've never worked on rbuild
before.
Gé van Geldorp.