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