shdocvw: Let ordinal 118 call shell32.188 dynamically
Rolf Kalbermatter
rolf.kalbermatter at citeng.com
Wed Oct 1 12:48:25 CDT 2003
Changelog
- dlls/shdocvw/shdocvw_main.c
SHDOCVW_118 (ShellDDEInit) is really a dynamic forward to SHELL32_188 but since
this function is exported by ordinal only under most Windows versions it seems
necessary to make the forward programmatically.
License: X11/LGPL
Rolf Kalbermatter
Index: dlls/shdocvw/shdocvw_main.c
===================================================================
RCS file: /home/wine/wine/dlls/shdocvw/shdocvw_main.c,v
retrieving revision 1.15
diff -u -r1.15 shdocvw_main.c
--- dlls/shdocvw/shdocvw_main.c 11 Sep 2003 01:04:24 -0000 1.15
+++ dlls/shdocvw/shdocvw_main.c 30 Sep 2003 21:54:26 -0000
@@ -33,7 +33,28 @@
WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
-/***********************************************************************
+HINSTANCE shdocvw_hinstance = 0;
+HMODULE SHDOCVW_hshell32 = 0;
+
+/*************************************************************************
+ * SHDOCVW DllMain
+ */
+BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID fImpLoad)
+{
+ TRACE("%p 0x%lx %p\n", hinst, fdwReason, fImpLoad);
+ switch (fdwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ shdocvw_hinstance = hinst;
+ break;
+ case DLL_PROCESS_DETACH:
+ if (SHDOCVW_hshell32) FreeLibrary(SHDOCVW_hshell32);
+ break;
+ }
+ return TRUE;
+}
+
+/*************************************************************************
* DllCanUnloadNow (SHDOCVW.@)
*/
HRESULT WINAPI SHDOCVW_DllCanUnloadNow(void)
@@ -81,6 +102,18 @@
return S_OK;
}
+/*************************************************************************
+ * SHDOCVW_LoadShell32
+ *
+ * makes sure the handle to shell32 is valid
+ */
+ BOOL SHDOCVW_LoadShell32(void)
+{
+ if (SHDOCVW_hshell32)
+ return TRUE;
+ return ((SHDOCVW_hshell32 = LoadLibraryA("shell32.dll")) != NULL);
+}
+
/***********************************************************************
* @ (SHDOCVW.110)
*
@@ -99,10 +132,23 @@
* Called by Win98 explorer.exe main binary, definitely has only one
* parameter.
*/
-DWORD WINAPI ShellDDEInit(DWORD dw1)
+static BOOL (WINAPI *pShellDDEInit)(BOOL start) = NULL;
+
+BOOL WINAPI ShellDDEInit(BOOL start)
{
- FIXME("(%08lx), stub!\n", dw1);
- return 0xcafedead;
+ TRACE("(%d)\n", start);
+
+ if (!pShellDDEInit)
+ {
+ if (!SHDOCVW_LoadShell32())
+ return FALSE;
+ pShellDDEInit = GetProcAddress(SHDOCVW_hshell32, (LPCSTR)188);
+ }
+
+ if (pShellDDEInit)
+ return pShellDDEInit(start);
+ else
+ return FALSE;
}
/***********************************************************************
More information about the wine-patches
mailing list