Jacek Caban : wscript: Added WScript.CreateObject implementation.

Alexandre Julliard julliard at winehq.org
Tue Apr 15 14:50:33 CDT 2014


Module: wine
Branch: master
Commit: 6617f27004039860ac5d487c5ec0e112890deaed
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6617f27004039860ac5d487c5ec0e112890deaed

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Apr 15 09:34:53 2014 +0200

wscript: Added WScript.CreateObject implementation.

---

 programs/wscript/host.c       |   25 +++++++++++++++++++++++--
 programs/wscript/tests/run.js |    8 ++++++++
 2 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/programs/wscript/host.c b/programs/wscript/host.c
index 2a47ed8..55d4010 100644
--- a/programs/wscript/host.c
+++ b/programs/wscript/host.c
@@ -236,8 +236,29 @@ static HRESULT WINAPI Host_put_Timeout(IHost *iface, LONG v)
 static HRESULT WINAPI Host_CreateObject(IHost *iface, BSTR ProgID, BSTR Prefix,
         IDispatch **out_Dispatch)
 {
-    WINE_FIXME("(%s %s %p)\n", wine_dbgstr_w(ProgID), wine_dbgstr_w(Prefix), out_Dispatch);
-    return E_NOTIMPL;
+    IUnknown *unk;
+    GUID guid;
+    HRESULT hres;
+
+    TRACE("(%s %s %p)\n", wine_dbgstr_w(ProgID), wine_dbgstr_w(Prefix), out_Dispatch);
+
+    if(Prefix && *Prefix) {
+        FIXME("Prefix %s not supported\n", debugstr_w(Prefix));
+        return E_NOTIMPL;
+    }
+
+    hres = CLSIDFromProgID(ProgID, &guid);
+    if(FAILED(hres))
+        return hres;
+
+    hres = CoCreateInstance(&guid, NULL, CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER|CLSCTX_REMOTE_SERVER,
+            &IID_IUnknown, (void**)&unk);
+    if(FAILED(hres))
+        return hres;
+
+    hres = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)out_Dispatch);
+    IUnknown_Release(unk);
+    return hres;
 }
 
 static HRESULT WINAPI Host_Echo(IHost *iface, SAFEARRAY *args)
diff --git a/programs/wscript/tests/run.js b/programs/wscript/tests/run.js
index 8c75d0a..db0d6f9 100644
--- a/programs/wscript/tests/run.js
+++ b/programs/wscript/tests/run.js
@@ -49,4 +49,12 @@ WScript.Interactive = true;
 ok(WScript.Interactive === true, "WScript.Interactive = " + WScript.Interactive);
 ok(WScript.Application === WScript, "WScript.Application = " + WScript.Application);
 
+var obj = WScript.CreateObject("Wine.Test");
+obj.ok(true, "Broken WScript.CreateObject object?");
+
+try {
+    obj = WScript.CreateObject("nonexistent");
+    ok(false, "Expected exception for CreateObject('nonexistent')");
+}catch(e) {}
+
 winetest.reportSuccess();




More information about the wine-cvs mailing list