Module: wine Branch: refs/heads/master Commit: d4da27aec3dca99c3b33fa329db6c257b0ce35fc URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=d4da27aec3dca99c3b33fa32...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Jul 31 13:27:22 2006 +0200
shdocvw: Added WebBrowser::Invoke implementation.
---
dlls/shdocvw/shdocvw.h | 1 + dlls/shdocvw/shdocvw_main.c | 26 ++++++++++++++++++++++++++ dlls/shdocvw/webbrowser.c | 15 ++++++++++++--- 3 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index 17ac8e7..2f9f9cc 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -212,6 +212,7 @@ extern void register_iewindow_class(void extern void unregister_iewindow_class(void);
HRESULT register_class_object(BOOL); +HRESULT get_typeinfo(ITypeInfo**);
/* memory allocation functions */
diff --git a/dlls/shdocvw/shdocvw_main.c b/dlls/shdocvw/shdocvw_main.c index 57b4993..ab962a1 100644 --- a/dlls/shdocvw/shdocvw_main.c +++ b/dlls/shdocvw/shdocvw_main.c @@ -40,6 +40,30 @@ LONG SHDOCVW_refCount = 0;
HINSTANCE shdocvw_hinstance = 0; static HMODULE SHDOCVW_hshell32 = 0; +static ITypeInfo *wb_typeinfo = NULL; + +HRESULT get_typeinfo(ITypeInfo **typeinfo) +{ + ITypeLib *typelib; + HRESULT hres; + + if(wb_typeinfo) { + *typeinfo = wb_typeinfo; + return S_OK; + } + + hres = LoadRegTypeLib(&LIBID_SHDocVw, 1, 1, LOCALE_SYSTEM_DEFAULT, &typelib); + if(FAILED(hres)) { + ERR("LoadRegTypeLib failed: %08lx\n", hres); + return hres; + } + + hres = ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IWebBrowser2, &wb_typeinfo); + ITypeLib_Release(typelib); + + *typeinfo = wb_typeinfo; + return hres; +}
/************************************************************************* * SHDOCVW DllMain @@ -56,6 +80,8 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWO case DLL_PROCESS_DETACH: if (SHDOCVW_hshell32) FreeLibrary(SHDOCVW_hshell32); unregister_iewindow_class(); + if(wb_typeinfo) + ITypeInfo_Release(wb_typeinfo); break; } return TRUE; diff --git a/dlls/shdocvw/webbrowser.c b/dlls/shdocvw/webbrowser.c index 2755bdd..6d46132 100644 --- a/dlls/shdocvw/webbrowser.c +++ b/dlls/shdocvw/webbrowser.c @@ -172,9 +172,18 @@ static HRESULT WINAPI WebBrowser_Invoke( EXCEPINFO *pExepInfo, UINT *puArgErr) { WebBrowser *This = WEBBROWSER_THIS(iface); - FIXME("(%p)->(%ld %s %ld %08x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + ITypeInfo *typeinfo; + HRESULT hres; + + TRACE("(%p)->(%ld %s %ld %08x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), lcid, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr); - return E_NOTIMPL; + + hres = get_typeinfo(&typeinfo); + if(FAILED(hres)) + return hres; + + return ITypeInfo_Invoke(typeinfo, WEBBROWSER2(This), dispIdMember, wFlags, pDispParams, + pVarResult, pExepInfo, puArgErr); }
/* IWebBrowser methods */ @@ -923,7 +932,7 @@ static HRESULT WebBrowser_Create(INT ver WebBrowser *ret; HRESULT hres;
- TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv); + TRACE("(%p %s %p) version=%d\n", pOuter, debugstr_guid(riid), ppv, version);
ret = shdocvw_alloc(sizeof(WebBrowser));