From: Jacek Caban Subject: oleacc: Added CAccPropServices stub implementation. Message-Id: <54173FDB.5060208@codeweavers.com> Date: Mon, 15 Sep 2014 21:36:59 +0200 try2: Changed tests to not depend on marshaling. --- dlls/oleacc/Makefile.in | 1 + dlls/oleacc/main.c | 6 -- dlls/oleacc/propservice.c | 257 ++++++++++++++++++++++++++++++++++++++++++++++ dlls/oleacc/tests/main.c | 16 +++ 4 files changed, 274 insertions(+), 6 deletions(-) create mode 100644 dlls/oleacc/propservice.c diff --git a/dlls/oleacc/Makefile.in b/dlls/oleacc/Makefile.in index c8b3dac..fda1b75 100644 --- a/dlls/oleacc/Makefile.in +++ b/dlls/oleacc/Makefile.in @@ -5,6 +5,7 @@ IMPORTS = uuid oleaut32 ole32 user32 C_SRCS = \ client.c \ main.c \ + propservice.c \ window.c IDL_SRCS = oleacc_classes.idl diff --git a/dlls/oleacc/main.c b/dlls/oleacc/main.c index 7b2f06a..18a43fb 100644 --- a/dlls/oleacc/main.c +++ b/dlls/oleacc/main.c @@ -407,12 +407,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, return TRUE; } -HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, void **ppv) -{ - FIXME("%s %s %p: stub\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv); - return E_NOTIMPL; -} - HRESULT WINAPI DllRegisterServer(void) { TRACE("()\n"); diff --git a/dlls/oleacc/propservice.c b/dlls/oleacc/propservice.c new file mode 100644 index 0000000..f27a8da --- /dev/null +++ b/dlls/oleacc/propservice.c @@ -0,0 +1,257 @@ +/* + * Copyright 2014 Jacek Caban for CodeWeavers + * + * 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 + +#include "oleacc.h" +#include "oleacc_private.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(oleacc); + +static HRESULT WINAPI AccPropServices_QueryInterface(IAccPropServices *iface, REFIID riid, void **ppv) +{ + if(IsEqualGUID(&IID_IUnknown, riid)) { + TRACE("(IID_IUnknown %p)\n", ppv); + *ppv = iface; + }else if(IsEqualGUID(&IID_IAccPropServices, riid)) { + TRACE("(IID_IAccPropServices %p)\n", ppv); + *ppv = iface; + }else { + FIXME("Unknown iface %s\n", debugstr_guid(riid)); + *ppv = NULL; + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; +} + +static ULONG WINAPI AccPropServices_AddRef(IAccPropServices *iface) +{ + return 2; +} + +static ULONG WINAPI AccPropServices_Release(IAccPropServices *iface) +{ + return 1; +} + +static HRESULT WINAPI AccPropServices_SetPropValue(IAccPropServices *iface, const BYTE *pIDString, + DWORD dwIDStringLen, MSAAPROPID idProp, VARIANT var) +{ + FIXME("(%p %u %s %s)\n", pIDString, dwIDStringLen, debugstr_guid(&idProp), debugstr_variant(&var)); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_SetPropServer(IAccPropServices *iface, const BYTE *pIDString, + DWORD dwIDStringLen, const MSAAPROPID *paProps, int cProps, IAccPropServer *pServer, AnnoScope AnnoScope) +{ + FIXME("(%p %u %p %d %p %u)\n", pIDString, dwIDStringLen, paProps, cProps, pServer, AnnoScope); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_ClearProps(IAccPropServices *iface, const BYTE *pIDString, + DWORD dwIDStringLen, const MSAAPROPID *paProps, int cProps) +{ + FIXME("(%p %u %p %d)\n", pIDString, dwIDStringLen, paProps, cProps); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_SetHwndProp(IAccPropServices *iface, HWND hwnd, DWORD idObject, + DWORD idChild, MSAAPROPID idProp, VARIANT var) +{ + FIXME("(%p %u %u %s %s)\n", hwnd, idObject, idChild, debugstr_guid(&idProp), debugstr_variant(&var)); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_SetHwndPropStr(IAccPropServices *iface, HWND hwnd, DWORD idObject, + DWORD idChild, MSAAPROPID idProp, LPWSTR str) +{ + FIXME("(%p %u %u %s %s)\n", hwnd, idObject, idChild, debugstr_guid(&idProp), debugstr_w(str)); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_SetHwndPropServer(IAccPropServices *iface, HWND hwnd, DWORD idObject, + DWORD idChild, const MSAAPROPID *paProps, int cProps, IAccPropServer *pServer, AnnoScope AnnoScope) +{ + FIXME("(%p %u %u %p %d %p %u)\n", hwnd, idObject, idChild, paProps, cProps, pServer, AnnoScope); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_ClearHwndProps(IAccPropServices *iface, HWND hwnd, DWORD idObject, + DWORD idChild, const MSAAPROPID *paProps, int cProps) +{ + FIXME("(%p %u %u %p %d)\n", hwnd, idObject, idChild, paProps, cProps); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_ComposeHwndIdentityString(IAccPropServices *iface, HWND hwnd, + DWORD idObject, DWORD idChild, BYTE **ppIDString, DWORD *pdwIDStringLen) +{ + FIXME("(%p %u %u %p %p)\n", hwnd, idObject, idChild, ppIDString, pdwIDStringLen); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_DecomposeHwndIdentityString(IAccPropServices *iface, const BYTE *pIDString, + DWORD dwIDStringLen, HWND *phwnd, DWORD *pidObject, DWORD *pidChild) +{ + FIXME("(%p %u %p %p %p)\n", pIDString, dwIDStringLen, phwnd, pidObject, pidChild); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_SetHmenuProp(IAccPropServices *iface, HMENU hmenu, DWORD idChild, + MSAAPROPID idProp, VARIANT var) +{ + FIXME("(%p %u %s %s)\n", hmenu, idChild, debugstr_guid(&idProp), debugstr_variant(&var)); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_SetHmenuPropStr(IAccPropServices *iface, HMENU hmenu, DWORD idChild, + MSAAPROPID idProp, LPWSTR str) +{ + FIXME("(%p %u %s %s)\n", hmenu, idChild, debugstr_guid(&idProp), debugstr_w(str)); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_SetHmenuPropServer(IAccPropServices *iface, HMENU hmenu, DWORD idChild, + const MSAAPROPID *paProps, int cProps, IAccPropServer *pServer, AnnoScope AnnoScope) +{ + FIXME("(%p %u %p %d %p %u)\n", hmenu, idChild, paProps, cProps, pServer, AnnoScope); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_ClearHmenuProps(IAccPropServices *iface, HMENU hmenu, DWORD idChild, + const MSAAPROPID *paProps, int cProps) +{ + FIXME("(%p %u %p %d)\n", hmenu, idChild, paProps, cProps); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_ComposeHmenuIdentityString(IAccPropServices *iface, HMENU hmenu, DWORD idChild, + BYTE **ppIDString, DWORD *pdwIDStringLen) +{ + FIXME("(%p %u %p %p)\n", hmenu, idChild, ppIDString, pdwIDStringLen); + return E_NOTIMPL; +} + +static HRESULT WINAPI AccPropServices_DecomposeHmenuIdentityString(IAccPropServices *iface, const BYTE *pIDString, + DWORD dwIDStringLen, HMENU *phmenu, DWORD *pidChild) +{ + FIXME("(%p %u %p %p\n", pIDString, dwIDStringLen, phmenu, pidChild); + return E_NOTIMPL; +} + +static const IAccPropServicesVtbl AccPropServicesVtbl = { + AccPropServices_QueryInterface, + AccPropServices_AddRef, + AccPropServices_Release, + AccPropServices_SetPropValue, + AccPropServices_SetPropServer, + AccPropServices_ClearProps, + AccPropServices_SetHwndProp, + AccPropServices_SetHwndPropStr, + AccPropServices_SetHwndPropServer, + AccPropServices_ClearHwndProps, + AccPropServices_ComposeHwndIdentityString, + AccPropServices_DecomposeHwndIdentityString, + AccPropServices_SetHmenuProp, + AccPropServices_SetHmenuPropStr, + AccPropServices_SetHmenuPropServer, + AccPropServices_ClearHmenuProps, + AccPropServices_ComposeHmenuIdentityString, + AccPropServices_DecomposeHmenuIdentityString +}; + +static IAccPropServices AccPropServices = { &AccPropServicesVtbl }; + +static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) +{ + *ppv = NULL; + + if(IsEqualGUID(&IID_IUnknown, riid)) { + TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv); + *ppv = iface; + }else if(IsEqualGUID(&IID_IClassFactory, riid)) { + TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv); + *ppv = iface; + } + + if(*ppv) { + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; + } + + FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv); + return E_NOINTERFACE; +} + +static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface) +{ + TRACE("(%p)\n", iface); + return 2; +} + +static ULONG WINAPI ClassFactory_Release(IClassFactory *iface) +{ + TRACE("(%p)\n", iface); + return 1; +} + +static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock) +{ + TRACE("(%p)->(%x)\n", iface, fLock); + return S_OK; +} + +static HRESULT WINAPI CAccPropServices_CreateInstance(IClassFactory *iface, IUnknown *outer, + REFIID riid, void **ppv) +{ + TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv); + + if(outer) { + *ppv = NULL; + return CLASS_E_NOAGGREGATION; + } + + return IAccPropServices_QueryInterface(&AccPropServices, riid, ppv); +} + +static const IClassFactoryVtbl CAccPropServicesFactoryVtbl = { + ClassFactory_QueryInterface, + ClassFactory_AddRef, + ClassFactory_Release, + CAccPropServices_CreateInstance, + ClassFactory_LockServer +}; + +static IClassFactory CAccPropServicesFactory = { &CAccPropServicesFactoryVtbl }; + +HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, void **ppv) +{ + if(IsEqualGUID(&CLSID_CAccPropServices, rclsid)) { + TRACE("(CLSID_CAccPropServices %s %p)\n", debugstr_guid(iid), ppv); + return IClassFactory_QueryInterface(&CAccPropServicesFactory, iid, ppv); + } + + FIXME("%s %s %p: stub\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv); + return E_NOTIMPL; +} diff --git a/dlls/oleacc/tests/main.c b/dlls/oleacc/tests/main.c index dbe8706..4e92c5e 100644 --- a/dlls/oleacc/tests/main.c +++ b/dlls/oleacc/tests/main.c @@ -574,6 +574,18 @@ static void test_default_client_accessible_object(void) IAccessible_Release(acc); } +static void test_CAccPropServices(void) +{ + IAccPropServices *acc_prop_services; + HRESULT hres; + + hres = CoCreateInstance(&CLSID_CAccPropServices, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, + &IID_IAccPropServices, (void**)&acc_prop_services); + ok(hres == S_OK, "Could not create CAccPropServices instance: %08x\n", hres); + + IAccPropServices_Release(acc_prop_services); +} + START_TEST(main) { int argc; @@ -613,4 +625,8 @@ START_TEST(main) unregister_window_class(); CoUninitialize(); + + CoInitialize(NULL); + test_CAccPropServices(); + CoUninitialize(); }