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