Module: wine Branch: master Commit: 9f907f63513950b433527f213eaa853f7e4f7b2c URL: http://source.winehq.org/git/wine.git/?a=commit;h=9f907f63513950b433527f213e...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Aug 30 11:36:23 2011 +0200
vbscript: Added IActiveScript::SetScriptSite implementation.
---
dlls/vbscript/vbscript.c | 27 +++++++++++++++++++++++++-- dlls/vbscript/vbscript.h | 4 ++++ 2 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/dlls/vbscript/vbscript.c b/dlls/vbscript/vbscript.c index f0da4ed..74cc745 100644 --- a/dlls/vbscript/vbscript.c +++ b/dlls/vbscript/vbscript.c @@ -89,8 +89,11 @@ static ULONG WINAPI VBScript_Release(IActiveScript *iface)
TRACE("(%p) ref=%d\n", iface, ref);
- if(!ref) + if(!ref) { + if(This->site) + IActiveScriptSite_Release(This->site); heap_free(This); + }
return ref; } @@ -98,7 +101,27 @@ static ULONG WINAPI VBScript_Release(IActiveScript *iface) static HRESULT WINAPI VBScript_SetScriptSite(IActiveScript *iface, IActiveScriptSite *pass) { VBScript *This = impl_from_IActiveScript(iface); - FIXME("(%p)->(%p)\n", This, pass); + LCID lcid; + HRESULT hres; + + TRACE("(%p)->(%p)\n", This, pass); + + if(!pass) + return E_POINTER; + + if(This->site) + return E_UNEXPECTED; + + if(InterlockedCompareExchange(&This->thread_id, GetCurrentThreadId(), 0)) + return E_UNEXPECTED; + + This->site = pass; + IActiveScriptSite_AddRef(This->site); + + hres = IActiveScriptSite_GetLCID(This->site, &lcid); + if(hres == S_OK) + This->lcid = lcid; + return S_OK; }
diff --git a/dlls/vbscript/vbscript.h b/dlls/vbscript/vbscript.h index cd97e09..cec9a04 100644 --- a/dlls/vbscript/vbscript.h +++ b/dlls/vbscript/vbscript.h @@ -24,6 +24,10 @@ struct VBScript { IActiveScriptParse IActiveScriptParse_iface;
LONG ref; + + IActiveScriptSite *site; + LONG thread_id; + LCID lcid; };
HRESULT WINAPI VBScriptFactory_CreateInstance(IClassFactory*,IUnknown*,REFIID,void**);