Jacek Caban : wscript.exe: Added support for IHost type info.
Alexandre Julliard
julliard at winehq.org
Fri Jul 30 10:24:16 CDT 2010
Module: wine
Branch: master
Commit: 5cc0d1ee80c56c9645cb291414c9ede4951d0cd6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5cc0d1ee80c56c9645cb291414c9ede4951d0cd6
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Jul 30 14:01:55 2010 +0200
wscript.exe: Added support for IHost type info.
---
programs/wscript/main.c | 27 +++++++++++++++++++++++++--
programs/wscript/wscript.h | 2 ++
2 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/programs/wscript/main.c b/programs/wscript/main.c
index d5631a2..612bb54 100644
--- a/programs/wscript/main.c
+++ b/programs/wscript/main.c
@@ -37,6 +37,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(wscript);
static const WCHAR wscriptW[] = {'W','S','c','r','i','p','t',0};
static const WCHAR wshW[] = {'W','S','H',0};
+ITypeInfo *host_ti;
+
static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface,
REFIID riid, void **ppv)
{
@@ -83,8 +85,8 @@ static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface,
return E_FAIL;
if(dwReturnMask & SCRIPTINFO_ITYPEINFO) {
- WINE_FIXME("SCRIPTINFO_ITYPEINFO not supported\n");
- return E_NOTIMPL;
+ ITypeInfo_AddRef(host_ti);
+ *ppti = host_ti;
}
if(dwReturnMask & SCRIPTINFO_IUNKNOWN) {
@@ -151,6 +153,23 @@ static IActiveScriptSiteVtbl ActiveScriptSiteVtbl = {
IActiveScriptSite script_site = { &ActiveScriptSiteVtbl };
+static BOOL load_typelib(void)
+{
+ ITypeLib *typelib;
+ HRESULT hres;
+
+ static const WCHAR wscript_exeW[] = {'w','s','c','r','i','p','t','.','e','x','e',0};
+
+ hres = LoadTypeLib(wscript_exeW, &typelib);
+ if(FAILED(hres))
+ return FALSE;
+
+ hres = ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IHost, &host_ti);
+
+ ITypeLib_Release(typelib);
+ return SUCCEEDED(hres);
+}
+
static BOOL get_engine_clsid(const WCHAR *ext, CLSID *clsid)
{
WCHAR fileid[64], progid[64];
@@ -222,6 +241,9 @@ static HRESULT init_engine(IActiveScript *script, IActiveScriptParse *parser)
{
HRESULT hres;
+ if(!load_typelib())
+ return FALSE;
+
hres = IActiveScript_SetScriptSite(script, &script_site);
if(FAILED(hres))
return FALSE;
@@ -327,6 +349,7 @@ int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cm
if(init_engine(script, parser)) {
run_script(cmdline, script, parser);
IActiveScript_Close(script);
+ ITypeInfo_Release(host_ti);
}else {
WINE_FIXME("Script initialization failed\n");
}
diff --git a/programs/wscript/wscript.h b/programs/wscript/wscript.h
index cd29ed4..a5c642d 100644
--- a/programs/wscript/wscript.h
+++ b/programs/wscript/wscript.h
@@ -19,3 +19,5 @@
#include "ihost.h"
extern IHost host_obj;
+
+extern ITypeInfo *host_ti;
More information about the wine-cvs
mailing list