Module: wine Branch: master Commit: c15cdad10d5b8b1febbcdf63be8a6c0b3c9b7e76 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c15cdad10d5b8b1febbcdf63be...
Author: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Fri Mar 28 21:10:55 2008 +1100
mscoree: Added ICorRuntimeHost support.
---
dlls/mscoree/Makefile.in | 2 + dlls/mscoree/corruntimehost.c | 288 ++++++++++++++++++++++++++++++++++++++++ dlls/mscoree/mscoree_main.c | 8 +- dlls/mscoree/mscoree_private.h | 26 ++++ 4 files changed, 323 insertions(+), 1 deletions(-)
diff --git a/dlls/mscoree/Makefile.in b/dlls/mscoree/Makefile.in index 77ae5d2..d98d02d 100644 --- a/dlls/mscoree/Makefile.in +++ b/dlls/mscoree/Makefile.in @@ -4,8 +4,10 @@ SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = mscoree.dll IMPORTS = advapi32 kernel32 +EXTRALIBS = -luuid
C_SRCS = \ + corruntimehost.c \ mscoree_main.c
@MAKE_DLL_RULES@ diff --git a/dlls/mscoree/corruntimehost.c b/dlls/mscoree/corruntimehost.c new file mode 100644 index 0000000..9de9bf5 --- /dev/null +++ b/dlls/mscoree/corruntimehost.c @@ -0,0 +1,288 @@ +/* + * + * Copyright 2008 Alistair Leslie-Hughes + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define COBJMACROS + +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "winreg.h" +#include "ole2.h" + +#include "cor.h" +#include "mscoree.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL( mscoree ); + +typedef struct _corruntimehost +{ + const struct ICorRuntimeHostVtbl *lpVtbl; + LONG ref; +} corruntimehost; + +static inline corruntimehost *impl_from_ICorRuntimeHost( ICorRuntimeHost *iface ) +{ + return (corruntimehost *)((char*)iface - FIELD_OFFSET(corruntimehost, lpVtbl)); +} + +/*** IUnknown methods ***/ +static HRESULT WINAPI corruntimehost_QueryInterface(ICorRuntimeHost* iface, + REFIID riid, + void **ppvObject) +{ + corruntimehost *This = impl_from_ICorRuntimeHost( iface ); + TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject); + + if ( IsEqualGUID( riid, &IID_ICorRuntimeHost ) || + IsEqualGUID( riid, &IID_IUnknown ) ) + { + *ppvObject = iface; + } + else + { + FIXME("Unsupported interface %s\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + + ICorRuntimeHost_AddRef( iface ); + + return S_OK; +} + +static ULONG WINAPI corruntimehost_AddRef(ICorRuntimeHost* iface) +{ + corruntimehost *This = impl_from_ICorRuntimeHost( iface ); + return InterlockedIncrement( &This->ref ); +} + +static ULONG WINAPI corruntimehost_Release(ICorRuntimeHost* iface) +{ + corruntimehost *This = impl_from_ICorRuntimeHost( iface ); + ULONG ref; + + ref = InterlockedDecrement( &This->ref ); + if ( ref == 0 ) + { + HeapFree( GetProcessHeap(), 0, This ); + } + + return ref; +} + +/*** ICorRuntimeHost methods ***/ +static HRESULT WINAPI corruntimehost_CreateLogicalThreadState( + ICorRuntimeHost* iface) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_DeleteLogicalThreadState( + ICorRuntimeHost* iface) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_SwitchInLogicalThreadState( + ICorRuntimeHost* iface, + DWORD *fiberCookie) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_SwitchOutLogicalThreadState( + ICorRuntimeHost* iface, + DWORD **fiberCookie) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_LocksHeldByLogicalThread( + ICorRuntimeHost* iface, + DWORD *pCount) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_MapFile( + ICorRuntimeHost* iface, + HANDLE hFile, + HMODULE *mapAddress) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_GetConfiguration( + ICorRuntimeHost* iface, + ICorConfiguration **pConfiguration) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_Start( + ICorRuntimeHost* iface) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_Stop( + ICorRuntimeHost* iface) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_CreateDomain( + ICorRuntimeHost* iface, + LPCWSTR friendlyName, + IUnknown *identityArray, + IUnknown **appDomain) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_GetDefaultDomain( + ICorRuntimeHost* iface, + IUnknown **pAppDomain) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_EnumDomains( + ICorRuntimeHost* iface, + HDOMAINENUM *hEnum) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_NextDomain( + ICorRuntimeHost* iface, + HDOMAINENUM hEnum, + IUnknown **appDomain) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_CloseEnum( + ICorRuntimeHost* iface, + HDOMAINENUM hEnum) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_CreateDomainEx( + ICorRuntimeHost* iface, + LPCWSTR friendlyName, + IUnknown *setup, + IUnknown *evidence, + IUnknown **appDomain) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_CreateDomainSetup( + ICorRuntimeHost* iface, + IUnknown **appDomainSetup) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_CreateEvidence( + ICorRuntimeHost* iface, + IUnknown **evidence) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_UnloadDomain( + ICorRuntimeHost* iface, + IUnknown *appDomain) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI corruntimehost_CurrentDomain( + ICorRuntimeHost* iface, + IUnknown **appDomain) +{ + FIXME("stub %p\n", iface); + return E_NOTIMPL; +} + +static const struct ICorRuntimeHostVtbl corruntimehost_vtbl = +{ + corruntimehost_QueryInterface, + corruntimehost_AddRef, + corruntimehost_Release, + corruntimehost_CreateLogicalThreadState, + corruntimehost_DeleteLogicalThreadState, + corruntimehost_SwitchInLogicalThreadState, + corruntimehost_SwitchOutLogicalThreadState, + corruntimehost_LocksHeldByLogicalThread, + corruntimehost_MapFile, + corruntimehost_GetConfiguration, + corruntimehost_Start, + corruntimehost_Stop, + corruntimehost_CreateDomain, + corruntimehost_GetDefaultDomain, + corruntimehost_EnumDomains, + corruntimehost_NextDomain, + corruntimehost_CloseEnum, + corruntimehost_CreateDomainEx, + corruntimehost_CreateDomainSetup, + corruntimehost_CreateEvidence, + corruntimehost_UnloadDomain, + corruntimehost_CurrentDomain +}; + +IUnknown* create_corruntimehost(void) +{ + corruntimehost *This; + + This = HeapAlloc( GetProcessHeap(), 0, sizeof *This ); + if ( !This ) + return NULL; + + This->lpVtbl = &corruntimehost_vtbl; + This->ref = 1; + + FIXME("return iface %p\n", This); + + return (IUnknown*) &This->lpVtbl; +} diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c index 6f850f2..4995393 100644 --- a/dlls/mscoree/mscoree_main.c +++ b/dlls/mscoree/mscoree_main.c @@ -27,8 +27,10 @@ #include "winreg.h" #include "ole2.h"
+#include "initguid.h" #include "cor.h" #include "mscoree.h" +#include "mscoree_private.h"
#include "wine/debug.h"
@@ -301,8 +303,12 @@ HRESULT WINAPI CorBindToRuntimeEx(LPWSTR szVersion, LPWSTR szBuildFlavor, DWORD FIXME("%s %s %d %s %s %p\n", debugstr_w(szVersion), debugstr_w(szBuildFlavor), nflags, debugstr_guid( rslsid ), debugstr_guid( riid ), ppv);
+ if(IsEqualGUID( riid, &IID_ICorRuntimeHost )) + { + *ppv = create_corruntimehost(); + return S_OK; + } *ppv = NULL; - return E_NOTIMPL; }
diff --git a/dlls/mscoree/mscoree_private.h b/dlls/mscoree/mscoree_private.h new file mode 100644 index 0000000..f329455 --- /dev/null +++ b/dlls/mscoree/mscoree_private.h @@ -0,0 +1,26 @@ +/* + * + * Copyright 2008 Alistair Leslie-Hughes + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __MSCOREE_PRIVATE__ +#define __MSCOREE_PRIVATE__ + +extern IUnknown* create_corruntimehost(void); + + +#endif /* __MSCOREE_PRIVATE__ */