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

This commit is contained in:
Mike McCormack 2003-09-08 19:32:14 +00:00 committed by Alexandre Julliard
parent 1136408fc6
commit aa1c2a35b1
8 changed files with 1026 additions and 1 deletions

3
configure vendored

File diff suppressed because one or more lines are too long

View File

@ -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

View File

@ -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

4
dlls/mshtml/.cvsignore Normal file
View File

@ -0,0 +1,4 @@
Makefile
mshtml.dll.dbg.c
mshtml.spec.c
mshtml.spec.def

19
dlls/mshtml/Makefile.in Normal file
View File

@ -0,0 +1,19 @@
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:

767
dlls/mshtml/document.c Normal file
View File

@ -0,0 +1,767 @@
/*
* HTML Document class
*
* 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 "winuser.h"
#include "winnls.h"
#include "docobj.h"
#include "ole2.h"
#include "uuids.h"
#include "urlmon.h"
#include "oleidl.h"
#include "objidl.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
typedef struct _HTMLDocument_impl {
ICOM_VTABLE(IPersistMoniker) *IPersistMoniker_vtbl;
ICOM_VTABLE(IPersistFile) *IPersistFile_vtbl;
ICOM_VTABLE(IPersist) *IPersist_vtbl;
ICOM_VTABLE(IOleObject) *IOleObject_vtbl;
ICOM_VTABLE(IViewObject) *IViewObject_vtbl;
ICOM_VTABLE(IOleDocument) *IOleDocument_vtbl;
ULONG ref_count;
IOleClientSite *site;
} HTMLDocument_impl;
static ULONG WINAPI HTMLDocument_AddRef(HTMLDocument_impl *This)
{
return ++This->ref_count;
}
static ULONG WINAPI HTMLDocument_Release(HTMLDocument_impl *This)
{
ULONG count;
count = --This->ref_count ;
if( !count )
HeapFree( GetProcessHeap(), 0, This );
return count;
}
static HRESULT WINAPI HTMLDocument_QueryInterface(
HTMLDocument_impl *This, REFIID riid, LPVOID *ppv)
{
TRACE("%p %s %p\n", This, debugstr_guid(riid), ppv);
if( IsEqualGUID( riid, &IID_IUnknown ) )
{
TRACE("returning IUnknown\n");
HTMLDocument_AddRef(This);
*ppv = This;
return S_OK;
}
if( IsEqualGUID( riid, &IID_IPersistMoniker ) )
{
TRACE("returning IPersistMoniker\n");
HTMLDocument_AddRef(This);
*ppv = This;
return S_OK;
}
if( IsEqualGUID( riid, &IID_IPersistFile ) )
{
TRACE("returning IPersistFile\n");
HTMLDocument_AddRef(This);
*ppv = &(This->IPersistFile_vtbl);
return S_OK;
}
if( IsEqualGUID( riid, &IID_IOleObject ) )
{
TRACE("returning IOleObject\n");
HTMLDocument_AddRef(This);
*ppv = &(This->IOleObject_vtbl);
return S_OK;
}
if( IsEqualGUID( riid, &IID_IPersist ) )
{
TRACE("returning IPersist\n");
HTMLDocument_AddRef(This);
*ppv = &(This->IPersist_vtbl);
return S_OK;
}
if( IsEqualGUID( riid, &IID_IViewObject ) )
{
TRACE("returning IViewObject\n");
HTMLDocument_AddRef(This);
*ppv = &(This->IViewObject_vtbl);
return S_OK;
}
if( IsEqualGUID( riid, &IID_IOleDocument ) )
{
TRACE("returning IOleDocument\n");
HTMLDocument_AddRef(This);
*ppv = &(This->IOleDocument_vtbl);
return S_OK;
}
if( IsEqualGUID( riid, &IID_IDispatch ) )
{
TRACE("returning IDispatch\n");
}
if( IsEqualGUID( riid, &IID_IOleCommandTarget ) )
{
TRACE("returning IOleCommandTarget\n");
}
return E_NOINTERFACE;
}
static HRESULT WINAPI fnIPersistMoniker_QueryInterface(
IPersistMoniker *iface, REFIID riid, LPVOID *ppv)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
return HTMLDocument_QueryInterface(This, riid, ppv);
}
static ULONG WINAPI fnIPersistMoniker_AddRef(IPersistMoniker *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
return HTMLDocument_AddRef(This);
}
static ULONG WINAPI fnIPersistMoniker_Release(IPersistMoniker *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
return HTMLDocument_Release(This);
}
static HRESULT WINAPI fnIPersistMoniker_GetClassID(IPersistMoniker *iface,
CLSID *pClassID )
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
FIXME("%p\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIPersistMoniker_IsDirty(IPersistMoniker *iface )
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
FIXME("%p\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIPersistMoniker_Load(IPersistMoniker *iface,
BOOL fFullyAvailable, IMoniker *pimkName, LPBC pibc, DWORD grfMode )
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
IStream *stm;
HRESULT r;
unsigned char buffer[0x201];
ULONG count;
TRACE("%p %d %p %p %08lx\n", This,
fFullyAvailable, pimkName, pibc, grfMode);
r = IMoniker_BindToStorage( pimkName, pibc, NULL,
&IID_IStream, (LPVOID*) &stm );
if( FAILED( r ) )
{
TRACE("IMoniker_BindToStorage failed %08lx\n", r);
return r;
}
while( 1 )
{
r = IStream_Read( stm, buffer, sizeof buffer-1, &count);
if( FAILED( r ) )
break;
if( count == 0 )
break;
buffer[count]=0;
TRACE("%s\n",buffer);
}
IStream_Release( stm );
return S_OK;
}
static HRESULT WINAPI fnIPersistMoniker_Save(IPersistMoniker *iface,
IMoniker *pinkName, LPBC pibc, BOOL fRemember )
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
FIXME("%p %p %p %d\n", This, pinkName, pibc, fRemember);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIPersistMoniker_SaveCompleted(IPersistMoniker *iface,
IMoniker *pinkName, LPBC pibc )
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
FIXME("%p %p %p\n", This, pinkName, pibc);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIPersistMoniker_GetCurMoniker(IPersistMoniker *iface,
IMoniker **pinkName )
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
FIXME("%p\n", This);
return E_NOTIMPL;
}
static ICOM_VTABLE(IPersistMoniker) IPersistMoniker_vtbl =
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
fnIPersistMoniker_QueryInterface,
fnIPersistMoniker_AddRef,
fnIPersistMoniker_Release,
fnIPersistMoniker_GetClassID,
fnIPersistMoniker_IsDirty,
fnIPersistMoniker_Load,
fnIPersistMoniker_Save,
fnIPersistMoniker_SaveCompleted,
fnIPersistMoniker_GetCurMoniker
};
static ULONG WINAPI fnIPersistFile_AddRef(IPersistFile *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
return HTMLDocument_AddRef(This);
}
static ULONG WINAPI fnIPersistFile_Release(IPersistFile *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
return HTMLDocument_Release(This);
}
static HRESULT WINAPI fnIPersistFile_QueryInterface(
IPersistFile *iface, REFIID riid, LPVOID *ppv)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
return HTMLDocument_QueryInterface(This, riid, ppv);
}
static HRESULT WINAPI fnIPersistFile_GetClassID(IPersistFile *iface,
CLSID *pClassID )
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
TRACE("%p\n", This);
memcpy( pClassID, &CLSID_HTMLDocument, sizeof CLSID_HTMLDocument);
return S_OK;
}
static HRESULT WINAPI fnIPersistFile_IsDirty(IPersistFile *iface )
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
FIXME("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIPersistFile_Load(IPersistFile *iface,
LPCOLESTR pszFileName, DWORD grfMode )
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
FIXME("%p %s %08lx\n", This, debugstr_w(pszFileName), grfMode);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIPersistFile_Save(IPersistFile *iface,
LPCOLESTR pszFileName, BOOL fRemember )
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
FIXME("%p %s %d\n", This, debugstr_w(pszFileName), fRemember);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIPersistFile_SaveCompleted(IPersistFile *iface,
LPCOLESTR pszFileName )
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
FIXME("%p %s\n", This, debugstr_w(pszFileName));
return E_NOTIMPL;
}
static HRESULT WINAPI fnIPersistFile_GetCurFile(IPersistFile *iface,
LPOLESTR* ppszFileName)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
FIXME("%p %p\n",This,ppszFileName);
return E_NOTIMPL;
}
static ICOM_VTABLE(IPersistFile) IPersistFile_vtbl =
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
fnIPersistFile_QueryInterface,
fnIPersistFile_AddRef,
fnIPersistFile_Release,
fnIPersistFile_GetClassID,
fnIPersistFile_IsDirty,
fnIPersistFile_Load,
fnIPersistFile_Save,
fnIPersistFile_SaveCompleted,
fnIPersistFile_GetCurFile,
};
static ULONG WINAPI fnIOleObject_AddRef(IOleObject *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
return HTMLDocument_AddRef(This);
}
static ULONG WINAPI fnIOleObject_Release(IOleObject *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
return HTMLDocument_Release(This);
}
static HRESULT WINAPI fnIOleObject_QueryInterface(
IOleObject *iface, REFIID riid, LPVOID *ppv)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
return HTMLDocument_QueryInterface(This, riid, ppv);
}
static HRESULT WINAPI fnIOleObject_SetClientSite(IOleObject *iface,
IOleClientSite *pClientSite)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p %p\n",This, pClientSite);
if( This->site )
IOleClientSite_Release( This->site );
if( pClientSite )
IOleClientSite_AddRef(pClientSite);
This->site = pClientSite;
return S_OK;
}
static HRESULT WINAPI fnIOleObject_GetClientSite(IOleObject *iface,
IOleClientSite **ppClientSite)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
if( This->site )
IOleClientSite_AddRef( This->site );
*ppClientSite = This->site;
return S_OK;
}
static HRESULT WINAPI fnIOleObject_SetHostNames(IOleObject *iface,
LPCOLESTR szContainerApp, LPCOLESTR szContainerObj)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_Close(IOleObject *iface,
DWORD dwSaveOption)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_SetMoniker(IOleObject *iface,
DWORD dwWhichMoniker, IMoniker *pmk)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_GetMoniker(IOleObject *iface,
DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_InitFromData(IOleObject *iface,
IDataObject *pDataObject, BOOL fCreation, DWORD dwReserved)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_GetClipboardData(IOleObject *iface,
DWORD dwReserved, IDataObject **ppDataObject)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_DoVerb(IOleObject *iface,
LONG iVerb, struct tagMSG *lpmsg, IOleClientSite *pActiveSite,
LONG lindex, HWND hwndParent, LPCRECT lprcPosRect)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p %ld %p %p %ld %p %p\n", This,
iVerb, lpmsg, pActiveSite, lindex, hwndParent, lprcPosRect);
switch( iVerb )
{
case OLEIVERB_SHOW:
TRACE("OLEIVERB_SHOW r = (%ld,%ld)-(%ld,%ld)\n",
lprcPosRect->left, lprcPosRect->top,
lprcPosRect->right, lprcPosRect->bottom );
break;
}
/*return E_NOTIMPL; */
return S_OK;
}
static HRESULT WINAPI fnIOleObject_EnumVerbs(IOleObject *iface,
IEnumOLEVERB **ppEnumOleVerb)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_Update(IOleObject *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_IsUpToDate(IOleObject *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_GetUserClassID(IOleObject *iface,
CLSID *pClsid)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_GetUserType(IOleObject *iface,
DWORD dwFormOfType, LPOLESTR *pszUserType)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_SetExtent(IOleObject *iface,
DWORD dwDrawAspect, SIZEL *psizel)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_GetExtent(IOleObject *iface,
DWORD dwDrawAspect, SIZEL *psizel)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_Advise(IOleObject *iface,
IAdviseSink *pAdvSink, DWORD *pdwConnection)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_Unadvise(IOleObject *iface,
DWORD dwConnection)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_EnumAdvise(IOleObject *iface,
IEnumSTATDATA **ppenumAdvise)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_GetMiscStatus(IOleObject *iface,
DWORD dwAspect, DWORD *pdwStatus)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleObject_SetColorScheme(IOleObject *iface,
struct tagLOGPALETTE *pLogpal)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static ICOM_VTABLE(IOleObject) IOleObject_vtbl =
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
fnIOleObject_QueryInterface,
fnIOleObject_AddRef,
fnIOleObject_Release,
fnIOleObject_SetClientSite,
fnIOleObject_GetClientSite,
fnIOleObject_SetHostNames,
fnIOleObject_Close,
fnIOleObject_SetMoniker,
fnIOleObject_GetMoniker,
fnIOleObject_InitFromData,
fnIOleObject_GetClipboardData,
fnIOleObject_DoVerb,
fnIOleObject_EnumVerbs,
fnIOleObject_Update,
fnIOleObject_IsUpToDate,
fnIOleObject_GetUserClassID,
fnIOleObject_GetUserType,
fnIOleObject_SetExtent,
fnIOleObject_GetExtent,
fnIOleObject_Advise,
fnIOleObject_Unadvise,
fnIOleObject_EnumAdvise,
fnIOleObject_GetMiscStatus,
fnIOleObject_SetColorScheme,
};
static ULONG WINAPI fnIPersist_AddRef(IPersist *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersist_vtbl, iface);
return HTMLDocument_AddRef(This);
}
static ULONG WINAPI fnIPersist_Release(IPersist *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersist_vtbl, iface);
return HTMLDocument_Release(This);
}
static HRESULT WINAPI fnIPersist_QueryInterface(
IPersist *iface, REFIID riid, LPVOID *ppv)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersist_vtbl, iface);
return HTMLDocument_QueryInterface(This, riid, ppv);
}
static HRESULT WINAPI fnIPersist_GetClassID(
IPersist *iface, CLSID * pClassID)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IPersist_vtbl, iface);
TRACE("%p %p\n", This, pClassID );
memcpy( pClassID, &CLSID_HTMLDocument, sizeof CLSID_HTMLDocument);
return S_OK;
}
static ICOM_VTABLE(IPersist) IPersist_vtbl =
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
fnIPersist_QueryInterface,
fnIPersist_AddRef,
fnIPersist_Release,
fnIPersist_GetClassID,
};
static ULONG WINAPI fnIViewObject_AddRef(IViewObject *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
return HTMLDocument_AddRef(This);
}
static ULONG WINAPI fnIViewObject_Release(IViewObject *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
return HTMLDocument_Release(This);
}
static HRESULT WINAPI fnIViewObject_QueryInterface(
IViewObject *iface, REFIID riid, LPVOID *ppv)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
return HTMLDocument_QueryInterface(This, riid, ppv);
}
static HRESULT WINAPI fnIViewObject_Draw( IViewObject *iface,
DWORD dwDrawAspect, LONG lindex, void *pvAspect,
DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw,
LPCRECTL lprcBounds, LPCRECTL lprcWBounds,
BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue),
DWORD dwContinue)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
FIXME("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIViewObject_GetColorSet( IViewObject *iface,
DWORD dwDrawAspect, LONG lindex, void *pvAspect,
DVTARGETDEVICE *ptd, HDC hicTargetDevice,
struct tagLOGPALETTE **ppColorSet)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
FIXME("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIViewObject_Freeze( IViewObject *iface,
DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
FIXME("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIViewObject_Unfreeze( IViewObject *iface,
DWORD dwFreeze)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
FIXME("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIViewObject_SetAdvise( IViewObject *iface,
DWORD aspects, DWORD advf, IAdviseSink *pAdvSink)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
FIXME("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIViewObject_GetAdvise( IViewObject *iface,
DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
FIXME("%p\n",This);
return E_NOTIMPL;
}
static ICOM_VTABLE(IViewObject) IViewObject_vtbl =
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
fnIViewObject_QueryInterface,
fnIViewObject_AddRef,
fnIViewObject_Release,
fnIViewObject_Draw,
fnIViewObject_GetColorSet,
fnIViewObject_Freeze,
fnIViewObject_Unfreeze,
fnIViewObject_SetAdvise,
fnIViewObject_GetAdvise,
};
static ULONG WINAPI fnIOleDocument_AddRef(IOleDocument *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
return HTMLDocument_AddRef(This);
}
static ULONG WINAPI fnIOleDocument_Release(IOleDocument *iface)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
return HTMLDocument_Release(This);
}
static HRESULT WINAPI fnIOleDocument_QueryInterface(
IOleDocument *iface, REFIID riid, LPVOID *ppv)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
return HTMLDocument_QueryInterface(This, riid, ppv);
}
static HRESULT WINAPI fnIOleDocument_CreateView(IOleDocument *iface,
IOleInPlaceSite *pIPSite, IStream *pstm, DWORD dwReserved,
IOleDocumentView **ppView)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleDocument_GetDocMiscStatus(IOleDocument *iface,
DWORD *pdwStatus)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI fnIOleDocument_EnumViews(IOleDocument *iface,
IEnumOleDocumentViews **ppEnum, IOleDocumentView **ppView)
{
ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
TRACE("%p\n",This);
return E_NOTIMPL;
}
static ICOM_VTABLE(IOleDocument) IOleDocument_vtbl =
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
fnIOleDocument_QueryInterface,
fnIOleDocument_AddRef,
fnIOleDocument_Release,
fnIOleDocument_CreateView,
fnIOleDocument_GetDocMiscStatus,
fnIOleDocument_EnumViews,
};
HRESULT HTMLDocument_create(IUnknown *pUnkOuter, LPVOID *ppObj)
{
HTMLDocument_impl *This;
TRACE("%p %p\n",pUnkOuter,ppObj);
This = HeapAlloc(GetProcessHeap(), 0, sizeof (HTMLDocument_impl));
This->IPersistMoniker_vtbl = &IPersistMoniker_vtbl;
This->IPersistFile_vtbl = &IPersistFile_vtbl;
This->IOleObject_vtbl = &IOleObject_vtbl;
This->IPersist_vtbl = &IPersist_vtbl;
This->IViewObject_vtbl = &IViewObject_vtbl;
This->IOleDocument_vtbl = &IOleDocument_vtbl;
This->ref_count = 1;
This->site = NULL;
*ppObj = (LPVOID) This;
TRACE("(%p) <- %p\n", ppObj, This);
return S_OK;
}

198
dlls/mshtml/main.c Normal file
View File

@ -0,0 +1,198 @@
/*
* 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;
}

22
dlls/mshtml/mshtml.spec Normal file
View File

@ -0,0 +1,22 @@
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