Commit aa1c2a35 authored by Mike McCormack's avatar Mike McCormack Committed by Alexandre Julliard

Added an initial (mostly stub) implementation of MSHTML.DLL.

parent 1136408f
......@@ -1452,6 +1452,7 @@ dlls/msacm/msadp32/Makefile
dlls/msacm/msg711/Makefile
dlls/msacm/winemp3/Makefile
dlls/msdmo/Makefile
dlls/mshtml/Makefile
dlls/msi/Makefile
dlls/msimg32/Makefile
dlls/msisys/Makefile
......
......@@ -58,6 +58,7 @@ BASEDIRS = \
msacm/msg711 \
msacm/winemp3 \
msdmo \
mshtml \
msi \
msimg32 \
msisys \
......@@ -248,6 +249,7 @@ SYMLINKS = \
msadp32.acm$(DLLEXT) \
msdmo.dll$(DLLEXT) \
msg711.acm$(DLLEXT) \
mshtml.dll$(DLLEXT) \
msi.dll$(DLLEXT) \
msimg32.dll$(DLLEXT) \
msisys.ocx$(DLLEXT) \
......@@ -484,6 +486,9 @@ msdmo.dll$(DLLEXT): msdmo/msdmo.dll$(DLLEXT)
msg711.acm$(DLLEXT): msacm/msg711/msg711.acm$(DLLEXT)
$(RM) $@ && $(LN_S) msacm/msg711/msg711.acm$(DLLEXT) $@
mshtml.dll$(DLLEXT): mshtml/mshtml.dll$(DLLEXT)
$(RM) $@ && $(LN_S) mshtml/mshtml.dll$(DLLEXT) $@
msi.dll$(DLLEXT): msi/msi.dll$(DLLEXT)
$(RM) $@ && $(LN_S) msi/msi.dll$(DLLEXT) $@
......@@ -724,6 +729,7 @@ IMPORT_LIBS = \
libmpr \
libmsacm32 \
libmsdmo \
libmshtml \
libmsi \
libmsimg32 \
libmsnet32 \
......@@ -1000,6 +1006,11 @@ libmsdmo.def: msdmo/msdmo.spec.def
libmsdmo.a: msdmo/msdmo.spec.def
$(DLLTOOL) -k -l $@ -d msdmo/msdmo.spec.def
libmshtml.def: mshtml/mshtml.spec.def
$(RM) $@ && $(LN_S) mshtml/mshtml.spec.def $@
libmshtml.a: mshtml/mshtml.spec.def
$(DLLTOOL) -k -l $@ -d mshtml/mshtml.spec.def
libmsi.def: msi/msi.spec.def
$(RM) $@ && $(LN_S) msi/msi.spec.def $@
libmsi.a: msi/msi.spec.def
......@@ -1319,6 +1330,7 @@ mapi32/mapi32.spec.def: $(WINEBUILD)
mpr/mpr.spec.def: $(WINEBUILD)
msacm/msacm32.spec.def: $(WINEBUILD)
msdmo/msdmo.spec.def: $(WINEBUILD)
mshtml/mshtml.spec.def: $(WINEBUILD)
msi/msi.spec.def: $(WINEBUILD)
msimg32/msimg32.spec.def: $(WINEBUILD)
msnet32/msnet32.spec.def: $(WINEBUILD)
......@@ -1436,6 +1448,7 @@ msacm/msacm32.dll$(DLLEXT): msacm
msacm/msadp32/msadp32.acm$(DLLEXT): msacm/msadp32
msdmo/msdmo.dll$(DLLEXT): msdmo
msacm/msg711/msg711.acm$(DLLEXT): msacm/msg711
mshtml/mshtml.dll$(DLLEXT): mshtml
msi/msi.dll$(DLLEXT): msi
msimg32/msimg32.dll$(DLLEXT): msimg32
msisys/msisys.ocx$(DLLEXT): msisys
......
Makefile
mshtml.dll.dbg.c
mshtml.spec.c
mshtml.spec.def
TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = mshtml.dll
IMPORTS = user32 advapi32 kernel32 ntdll
EXTRALIBS = $(LIBUNICODE) $(LIBUUID)
EXTRADEFS = -DCOM_NO_WINDOWS_H
LDDLLFLAGS = @LDDLLFLAGS@
SYMBOLFILE = $(MODULE).tmp.o
C_SRCS = \
document.c \
main.c
@MAKE_DLL_RULES@
### Dependencies:
/*
* MSHTML Class Factory
*
* Copyright 2002 Lionel Ulmer
* Copyright 2003 Mike McCormack
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "config.h"
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "ole2.h"
#include "uuids.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
extern HRESULT HTMLDocument_create(IUnknown *pUnkOuter, LPVOID *ppObj);
/* For the moment, do nothing here. */
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
{
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hInstDLL);
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
/******************************************************************************
* MSHTML ClassFactory
*/
typedef struct {
IClassFactory ITF_IClassFactory;
DWORD ref;
HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj);
} IClassFactoryImpl;
struct object_creation_info
{
const CLSID *clsid;
LPCSTR szClassName;
HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj);
};
static const struct object_creation_info object_creation[] =
{
{ &CLSID_HTMLDocument, "HTMLDocument", HTMLDocument_create },
};
static HRESULT WINAPI
HTMLCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
{
ICOM_THIS(IClassFactoryImpl,iface);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IClassFactory))
{
IClassFactory_AddRef(iface);
*ppobj = This;
return S_OK;
}
WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
static ULONG WINAPI HTMLCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
static ULONG WINAPI HTMLCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
ULONG ref = --This->ref;
if (ref == 0)
HeapFree(GetProcessHeap(), 0, This);
return ref;
}
static HRESULT WINAPI HTMLCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter,
REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
HRESULT hres;
LPUNKNOWN punk;
TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
hres = This->pfnCreateInstance(pOuter, (LPVOID *) &punk);
if (FAILED(hres)) {
*ppobj = NULL;
return hres;
}
hres = IUnknown_QueryInterface(punk, riid, ppobj);
if (FAILED(hres)) {
*ppobj = NULL;
return hres;
}
IUnknown_Release(punk);
return hres;
}
static HRESULT WINAPI HTMLCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n",This,dolock);
return S_OK;
}
static ICOM_VTABLE(IClassFactory) HTMLCF_Vtbl =
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
HTMLCF_QueryInterface,
HTMLCF_AddRef,
HTMLCF_Release,
HTMLCF_CreateInstance,
HTMLCF_LockServer
};
HRESULT WINAPI MSHTML_DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
{
int i;
IClassFactoryImpl *factory;
TRACE("%s %s %p\n",debugstr_guid(rclsid), debugstr_guid(iid), ppv);
if ( !IsEqualGUID( &IID_IClassFactory, iid )
&& ! IsEqualGUID( &IID_IUnknown, iid) )
return E_NOINTERFACE;
for (i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++)
{
if (IsEqualGUID(object_creation[i].clsid, rclsid))
break;
}
if (i == sizeof(object_creation)/sizeof(object_creation[0]))
{
FIXME("%s: no class found.\n", debugstr_guid(rclsid));
return CLASS_E_CLASSNOTAVAILABLE;
}
TRACE("Creating a class factory for %s\n",object_creation[i].szClassName);
factory = HeapAlloc(GetProcessHeap(), 0, sizeof(*factory));
if (factory == NULL) return E_OUTOFMEMORY;
factory->ITF_IClassFactory.lpVtbl = &HTMLCF_Vtbl;
factory->ref = 1;
factory->pfnCreateInstance = object_creation[i].pfnCreateInstance;
*ppv = &(factory->ITF_IClassFactory);
TRACE("(%p) <- %p\n", ppv, &(factory->ITF_IClassFactory) );
return S_OK;
}
HRESULT WINAPI MSHTML_DllCanUnloadNow(void)
{
FIXME("\n");
return S_FALSE;
}
/* appears to have the same prototype as WinMain */
INT WINAPI RunHTMLApplication( HINSTANCE hinst, HINSTANCE hPrevInst,
LPCSTR szCmdLine, INT nCmdShow )
{
FIXME("%p %p %s %d\n", hinst, hPrevInst, debugstr_a(szCmdLine), nCmdShow );
return 0;
}
1 stub PrintHTML
2 stub SvrTri_ClearCache
3 stub CreateHTMLPropertyPage
4 stdcall -private DllCanUnloadNow() MSHTML_DllCanUnloadNow
5 stub DllEnumClassObjects
6 stdcall -private DllGetClassObject(ptr ptr ptr) MSHTML_DllGetClassObject
7 stub DllInstall
8 stub DllRegisterServer
9 stub DllUnregisterServer
10 stub MatchExactGetIDsOfNames
11 stub RNIGetCompatibleVersion
12 stdcall RunHTMLApplication()
13 stub ShowHTMLDialog
14 stub ShowModalDialog
15 stub ShowModelessHTMLDialog
16 stub SvrTri_GetDLText
17 stub SvrTri_NormalizeUA
18 stub com_ms_osp_ospmrshl_classInit
19 stub com_ms_osp_ospmrshl_copyToExternal
20 stub com_ms_osp_ospmrshl_releaseByValExternal
21 stub com_ms_osp_ospmrshl_toJava
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment