From: Vibhav Pant <vibhavp(a)gmail.com> --- dlls/vccorlib140/tests/vccorlib.c | 46 +++++++++++++++++++++++++++++++ dlls/vccorlib140/vccorlib.c | 7 +++++ dlls/vccorlib140/vccorlib140.spec | 6 ++-- 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/dlls/vccorlib140/tests/vccorlib.c b/dlls/vccorlib140/tests/vccorlib.c index 035cfdb880f..78a1ba94b0d 100644 --- a/dlls/vccorlib140/tests/vccorlib.c +++ b/dlls/vccorlib140/tests/vccorlib.c @@ -20,6 +20,8 @@ #define COBJMACROS +#include "initguid.h" +#include "activation.h" #include "objbase.h" #include "wine/test.h" @@ -55,6 +57,7 @@ DEFINE_EXPECT(PostUninitialize); static HRESULT (__cdecl *pInitializeData)(int); static void (__cdecl *pUninitializeData)(int); +static HRESULT (WINAPI *pGetActivationFactoryByPCWSTR)(const WCHAR *, const GUID *, void **); static BOOL init(void) { @@ -73,6 +76,19 @@ static BOOL init(void) "?UninitializeData(a)Details@Platform@@YAXH(a)Z"); ok(pUninitializeData != NULL, "UninitializeData not available\n"); +#ifdef __arm__ + pGetActivationFactoryByPCWSTR = (void *)GetProcAddress(hmod, + "?GetActivationFactoryByPCWSTR@@YAJPAXAAVGuid(a)Platform@@PAPAX(a)Z"); +#else + if (sizeof(void *) == 8) + pGetActivationFactoryByPCWSTR = (void *)GetProcAddress(hmod, + "?GetActivationFactoryByPCWSTR@@YAJPEAXAEAVGuid(a)Platform@@PEAPEAX(a)Z"); + else + pGetActivationFactoryByPCWSTR = (void *)GetProcAddress(hmod, + "?GetActivationFactoryByPCWSTR@@YGJPAXAAVGuid(a)Platform@@PAPAX(a)Z"); +#endif + ok(pGetActivationFactoryByPCWSTR != NULL, "GetActivationFactoryByPCWSTR not available\n"); + return TRUE; } @@ -212,10 +228,40 @@ static void test_InitializeData(void) ok(hr == S_OK, "CoRevokeInitializeSpy returned %lx\n", hr); } +static void test_GetActivationFactoryByPCWSTR(void) +{ + static const GUID guid_null = {0}; + HRESULT hr; + void *out; + + hr = pGetActivationFactoryByPCWSTR(L"Wine.Nonexistent.RuntimeClass", &IID_IActivationFactory, &out); + todo_wine ok(hr == CO_E_NOTINITIALIZED, "got hr %#lx\n", hr); + + hr = pInitializeData(1); + ok(hr == S_OK, "got hr %#lx\n", hr); + + hr = pGetActivationFactoryByPCWSTR(L"Wine.Nonexistent.RuntimeClass", &IID_IActivationFactory, &out); + todo_wine ok(hr == REGDB_E_CLASSNOTREG, "got hr %#lx\n", hr); + + hr = pGetActivationFactoryByPCWSTR(L"Windows.Foundation.Metadata.ApiInformation", &IID_IActivationFactory, &out); + todo_wine ok(hr == S_OK, "got hr %#lx\n", hr); + if (SUCCEEDED(hr)) IActivationFactory_Release(out); + + hr = pGetActivationFactoryByPCWSTR(L"Windows.Foundation.Metadata.ApiInformation", &IID_IInspectable, &out); + todo_wine ok(hr == S_OK, "got hr %#lx\n", hr); + if (SUCCEEDED(hr)) IActivationFactory_Release(out); + + hr = pGetActivationFactoryByPCWSTR(L"Windows.Foundation.Metadata.ApiInformation", &guid_null, &out); + todo_wine ok(hr == E_NOINTERFACE, "got hr %#lx\n", hr); + + pUninitializeData(1); +} + START_TEST(vccorlib) { if(!init()) return; test_InitializeData(); + test_GetActivationFactoryByPCWSTR(); } diff --git a/dlls/vccorlib140/vccorlib.c b/dlls/vccorlib140/vccorlib.c index 6665a5962a5..2d4341ba82f 100644 --- a/dlls/vccorlib140/vccorlib.c +++ b/dlls/vccorlib140/vccorlib.c @@ -40,3 +40,10 @@ void __cdecl UninitializeData(int type) if (type) RoUninitialize(); } + +HRESULT WINAPI GetActivationFactoryByPCWSTR(const WCHAR *name, const GUID *iid, void **out) +{ + FIXME("(%s, %s, %p) stub\n", debugstr_w(name), debugstr_guid(iid), out); + + return E_NOTIMPL; +} diff --git a/dlls/vccorlib140/vccorlib140.spec b/dlls/vccorlib140/vccorlib140.spec index ecae1e9464a..d0dc38b8acb 100644 --- a/dlls/vccorlib140/vccorlib140.spec +++ b/dlls/vccorlib140/vccorlib140.spec @@ -73,9 +73,9 @@ @ stub -arch=i386 ?GetActivationFactory(a)Details@Platform@@YGJPAVModuleBase(a)1WRL@Microsoft@@PAUHSTRING__@@PAPAUIActivationFactory@@@Z @ stub -arch=arm ?GetActivationFactory(a)Details@Platform@@YAJPAVModuleBase(a)1WRL@Microsoft@@PAUHSTRING__@@PAPAUIActivationFactory@@@Z @ stub -arch=win64 ?GetActivationFactory(a)Details@Platform@@YAJPEAVModuleBase(a)1WRL@Microsoft@@PEAUHSTRING__@@PEAPEAUIActivationFactory@@@Z -@ stub -arch=i386 ?GetActivationFactoryByPCWSTR@@YGJPAXAAVGuid(a)Platform@@PAPAX(a)Z -@ stub -arch=arm ?GetActivationFactoryByPCWSTR@@YAJPAXAAVGuid(a)Platform@@PAPAX(a)Z -@ stub -arch=win64 ?GetActivationFactoryByPCWSTR@@YAJPEAXAEAVGuid(a)Platform@@PEAPEAX(a)Z +@ stdcall -arch=i386 ?GetActivationFactoryByPCWSTR@@YGJPAXAAVGuid(a)Platform@@PAPAX(a)Z(wstr ptr ptr) GetActivationFactoryByPCWSTR +@ stdcall -arch=arm ?GetActivationFactoryByPCWSTR@@YAJPAXAAVGuid(a)Platform@@PAPAX(a)Z(wstr ptr ptr) GetActivationFactoryByPCWSTR +@ stdcall -arch=win64 ?GetActivationFactoryByPCWSTR@@YAJPEAXAEAVGuid(a)Platform@@PEAPEAX(a)Z(wstr ptr ptr) GetActivationFactoryByPCWSTR @ stub -arch=win32 ??0ClassNotRegisteredException(a)Platform@@Q$AAA(a)XZ @ stub -arch=win64 ??0ClassNotRegisteredException(a)Platform@@QE$AAA(a)XZ @ stub -arch=win32 ?GetCmdArguments(a)Details@Platform@@YAPAPA_WPAH(a)Z -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8741