Hi,
Changelog: mscoree: Implement CreateInterface Best Regards Alistair Leslie-Hughes
>From 6e4b9aff1f2a8776be0ad3cf6e9d0404dd5bec29 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes <leslie_alist...@hotmail.com> Date: Tue, 1 Oct 2013 10:17:50 +1000 Subject: [PATCH 2/2] Implement CreateInterface --- dlls/mscoree/mscoree.spec | 1 + dlls/mscoree/mscoree_main.c | 12 ++++++++++++ dlls/mscoree/tests/mscoree.c | 29 ++++++++++++++++++++++++++++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/dlls/mscoree/mscoree.spec b/dlls/mscoree/mscoree.spec index ad883c6..93248e2 100644 --- a/dlls/mscoree/mscoree.spec +++ b/dlls/mscoree/mscoree.spec @@ -30,6 +30,7 @@ @ stub CorTickleSvc @ stdcall CreateConfigStream(wstr ptr) @ stdcall CreateDebuggingInterfaceFromVersion(long wstr ptr) +@ stdcall CreateInterface(ptr ptr ptr) @ stdcall -private DllCanUnloadNow() @ stdcall -private DllGetClassObject(ptr ptr ptr) @ stdcall -private DllRegisterServer() diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c index de37706..f4c6c7d 100644 --- a/dlls/mscoree/mscoree_main.c +++ b/dlls/mscoree/mscoree_main.c @@ -594,6 +594,18 @@ HRESULT WINAPI CLRCreateInstance(REFCLSID clsid, REFIID riid, LPVOID *ppInterfac return CLASS_E_CLASSNOTAVAILABLE; } +HRESULT WINAPI CreateInterface(REFCLSID clsid, REFIID riid, LPVOID *ppInterface) +{ + TRACE("(%s,%s,%p)\n", debugstr_guid(clsid), debugstr_guid(riid), ppInterface); + + if (IsEqualGUID(clsid, &CLSID_CLRMetaHost)) + return CLRMetaHost_CreateInstance(riid, ppInterface); + + FIXME("not implemented for class %s\n", debugstr_guid(clsid)); + + return CLASS_E_CLASSNOTAVAILABLE; +} + HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) { mscorecf *This; diff --git a/dlls/mscoree/tests/mscoree.c b/dlls/mscoree/tests/mscoree.c index f8de6fa..41844ef 100644 --- a/dlls/mscoree/tests/mscoree.c +++ b/dlls/mscoree/tests/mscoree.c @@ -21,6 +21,7 @@ #include "corerror.h" #include "mscoree.h" +#include "metahost.h" #include "shlwapi.h" #include "wine/test.h" @@ -31,6 +32,7 @@ static HRESULT (WINAPI *pGetCORSystemDirectory)(LPWSTR, DWORD, DWORD*); static HRESULT (WINAPI *pGetRequestedRuntimeInfo)(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, DWORD, LPWSTR, DWORD, DWORD*, LPWSTR, DWORD, DWORD*); static HRESULT (WINAPI *pLoadLibraryShim)(LPCWSTR, LPCWSTR, LPVOID, HMODULE*); static HRESULT (WINAPI *pCreateConfigStream)(LPCWSTR, IStream**); +static HRESULT (WINAPI *pCreateInterface)(REFCLSID, REFIID, VOID**); static BOOL init_functionpointers(void) { @@ -47,8 +49,10 @@ static BOOL init_functionpointers(void) pGetRequestedRuntimeInfo = (void *)GetProcAddress(hmscoree, "GetRequestedRuntimeInfo"); pLoadLibraryShim = (void *)GetProcAddress(hmscoree, "LoadLibraryShim"); pCreateConfigStream = (void *)GetProcAddress(hmscoree, "CreateConfigStream"); + pCreateInterface = (void *)GetProcAddress(hmscoree, "CreateInterface"); - if (!pGetCORVersion || !pGetCORSystemDirectory || !pGetRequestedRuntimeInfo || !pLoadLibraryShim) + if (!pGetCORVersion || !pGetCORSystemDirectory || !pGetRequestedRuntimeInfo || !pLoadLibraryShim || + !pCreateInterface) { win_skip("functions not available\n"); FreeLibrary(hmscoree); @@ -386,6 +390,28 @@ static void test_createconfigstream(void) DeleteFileW(file); } +void test_createinstance(void) +{ + HRESULT hr; + ICLRMetaHost *host; + + if(!pCreateInterface) + { + win_skip("Function CreateInterface not found.\n"); + return; + } + + hr = pCreateInterface(&CLSID_CLRMetaHost, &IID_ICLRMetaHost, (void**)&host); + if(SUCCEEDED(hr)) + { + ICLRMetaHost_Release(host); + } + else + { + win_skip(".NET 4 not installed.\n"); + } +} + START_TEST(mscoree) { if (!init_functionpointers()) @@ -394,6 +420,7 @@ START_TEST(mscoree) test_versioninfo(); test_loadlibraryshim(); test_createconfigstream(); + test_createinstance(); FreeLibrary(hmscoree); } -- 1.8.4.rc3