Jacek Caban : vbscript: Added IActiveScript::SetScriptSite implementation.
Alexandre Julliard
julliard at winehq.org
Tue Aug 30 12:48:37 CDT 2011
Module: wine
Branch: master
Commit: 9f907f63513950b433527f213eaa853f7e4f7b2c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9f907f63513950b433527f213eaa853f7e4f7b2c
Author: Jacek Caban <jacek at 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**);
More information about the wine-cvs
mailing list