[PATCH v3 5/5] ieframe: Add stub implementation of IInternetExplorerManager.

Jacek Caban jacek at codeweavers.com
Tue Aug 15 10:39:50 CDT 2017


On 10.08.2017 20:52, Zebediah Figura wrote:
> v2: register IE and IEM separately, and the latter with SINGLEUSE
> (thanks Jacek)
>
> Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
> ---
>  dlls/ieframe/ieframe.h         |   5 +-
>  dlls/ieframe/ieframe_main.c    |  35 ++++---------
>  dlls/ieframe/iexplore.c        | 111 ++++++++++++++++++++++++++++++++++++++---
>  dlls/ieframe/tests/ie.c        |  21 ++++++++
>  programs/iexplore/iexplore.inf |   3 ++
>  5 files changed, 142 insertions(+), 33 deletions(-)
>
> diff --git a/dlls/ieframe/ieframe.h b/dlls/ieframe/ieframe.h
> index d1f1c5daf24..c690d5c6878 100644
> --- a/dlls/ieframe/ieframe.h
> +++ b/dlls/ieframe/ieframe.h
> @@ -312,13 +312,16 @@ TID_LIST
>  } tid_t;
>  
>  HRESULT get_typeinfo(tid_t,ITypeInfo**) DECLSPEC_HIDDEN;
> -HRESULT register_class_object(BOOL) DECLSPEC_HIDDEN;
>  
>  HRESULT WINAPI CUrlHistory_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
>  HRESULT WINAPI InternetExplorer_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
>  HRESULT WINAPI InternetShortcut_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
>  HRESULT WINAPI WebBrowser_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
>  HRESULT WINAPI WebBrowserV1_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
> +HRESULT WINAPI InternetExplorerManager_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
> +
> +extern IClassFactory InternetExplorerFactory;
> +extern IClassFactory InternetExplorerManagerFactory;

This is missing DECLSPEC_HIDDEN.

>  
> +/******************************************************************
> + *      IInternetExplorerManager implementation
> + */
> +struct internet_explorer_manager {
> +    IInternetExplorerManager IInternetExplorerManager_iface;
> +    LONG ref;
> +};

Please use the type from public declaration (coclass). See how
InternetExplorer object is declared.

> +HRESULT WINAPI InternetExplorerManager_Create(IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppv)
> +{
> +    struct internet_explorer_manager *ret;
> +
> +    TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv);
> +
> +    if (!(ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ret))))
> +        return E_OUTOFMEMORY;
> +
> +    ret->IInternetExplorerManager_iface.lpVtbl = &InternetExplorerManager_vtbl;
> +    return IInternetExplorerManager_QueryInterface(&ret->IInternetExplorerManager_iface, riid, ppv);
> +}

This leaks the object if QueryInterface fails. The usual way to handle
is to set initial ref to 1 and release the object after QI() call.


> +static void test_InternetExplorerManager(void)
> +{
> +    IUnknown *unk;
> +    ULONG ref;
> +    HRESULT hres;
> +
> +    hres = CoCreateInstance(&CLSID_InternetExplorerManager, NULL, CLSCTX_LOCAL_SERVER,
> +            &IID_IInternetExplorerManager, (void**)&unk);
> +    ok(hres == S_OK || hres == REGDB_E_CLASSNOTREG, "Could not create InternetExplorerManager instance: %08x\n", hres);

Use broken() for failure with older versions.

> +
> +    if(hres != S_OK)
> +        return;

This could use a win_skip().

Thanks,
Jacek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20170815/5d5888c0/attachment-0001.html>


More information about the wine-devel mailing list