vbscript: Add stub IActiveScriptDebug interface.

Visual Pinball 9.9.5 expects this interface to be present, and crashes
on teardown trying to Release() it.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2018-05-21 20:32:40 -05:00 committed by Alexandre Julliard
parent 0b6337f095
commit 3dde8287c6
2 changed files with 66 additions and 0 deletions

View File

@ -29,12 +29,14 @@ WINE_DEFAULT_DEBUG_CHANNEL(vbscript);
#ifdef _WIN64
#define CTXARG_T DWORDLONG
#define IActiveScriptDebugVtbl IActiveScriptDebug64Vtbl
#define IActiveScriptParseVtbl IActiveScriptParse64Vtbl
#define IActiveScriptParseProcedure2Vtbl IActiveScriptParseProcedure2_64Vtbl
#else
#define CTXARG_T DWORD
#define IActiveScriptDebugVtbl IActiveScriptDebug32Vtbl
#define IActiveScriptParseVtbl IActiveScriptParse32Vtbl
#define IActiveScriptParseProcedure2Vtbl IActiveScriptParseProcedure2_32Vtbl
@ -42,6 +44,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(vbscript);
struct VBScript {
IActiveScript IActiveScript_iface;
IActiveScriptDebug IActiveScriptDebug_iface;
IActiveScriptParse IActiveScriptParse_iface;
IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_iface;
IObjectSafety IObjectSafety_iface;
@ -267,6 +270,9 @@ static HRESULT WINAPI VBScript_QueryInterface(IActiveScript *iface, REFIID riid,
}else if(IsEqualGUID(riid, &IID_IActiveScript)) {
TRACE("(%p)->(IID_IActiveScript %p)\n", This, ppv);
*ppv = &This->IActiveScript_iface;
}else if(IsEqualGUID(riid, &IID_IActiveScriptDebug)) {
TRACE("(%p)->(IID_IActiveScriptDebug %p)\n", This, ppv);
*ppv = &This->IActiveScriptDebug_iface;
}else if(IsEqualGUID(riid, &IID_IActiveScriptParse)) {
TRACE("(%p)->(IID_IActiveScriptParse %p)\n", This, ppv);
*ppv = &This->IActiveScriptParse_iface;
@ -564,6 +570,64 @@ static const IActiveScriptVtbl VBScriptVtbl = {
VBScript_Clone
};
static inline VBScript *impl_from_IActiveScriptDebug(IActiveScriptDebug *iface)
{
return CONTAINING_RECORD(iface, VBScript, IActiveScriptDebug_iface);
}
static HRESULT WINAPI VBScriptDebug_QueryInterface(IActiveScriptDebug *iface, REFIID riid, void **ppv)
{
VBScript *This = impl_from_IActiveScriptDebug(iface);
return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
}
static ULONG WINAPI VBScriptDebug_AddRef(IActiveScriptDebug *iface)
{
VBScript *This = impl_from_IActiveScriptDebug(iface);
return IActiveScript_AddRef(&This->IActiveScript_iface);
}
static ULONG WINAPI VBScriptDebug_Release(IActiveScriptDebug *iface)
{
VBScript *This = impl_from_IActiveScriptDebug(iface);
return IActiveScript_Release(&This->IActiveScript_iface);
}
static HRESULT WINAPI VBScriptDebug_GetScriptTextAttributes(IActiveScriptDebug *iface,
LPCOLESTR code, ULONG len, LPCOLESTR delimiter, DWORD flags, SOURCE_TEXT_ATTR *attr)
{
VBScript *This = impl_from_IActiveScriptDebug(iface);
FIXME("(%p)->(%s %u %s %#x %p)\n", This, debugstr_w(code), len,
debugstr_w(delimiter), flags, attr);
return E_NOTIMPL;
}
static HRESULT WINAPI VBScriptDebug_GetScriptletTextAttributes(IActiveScriptDebug *iface,
LPCOLESTR code, ULONG len, LPCOLESTR delimiter, DWORD flags, SOURCE_TEXT_ATTR *attr)
{
VBScript *This = impl_from_IActiveScriptDebug(iface);
FIXME("(%p)->(%s %u %s %#x %p)\n", This, debugstr_w(code), len,
debugstr_w(delimiter), flags, attr);
return E_NOTIMPL;
}
static HRESULT WINAPI VBScriptDebug_EnumCodeContextsOfPosition(IActiveScriptDebug *iface,
CTXARG_T source, ULONG offset, ULONG len, IEnumDebugCodeContexts **ret)
{
VBScript *This = impl_from_IActiveScriptDebug(iface);
FIXME("(%p)->(%s %u %u %p)\n", This, wine_dbgstr_longlong(source), offset, len, ret);
return E_NOTIMPL;
}
static const IActiveScriptDebugVtbl VBScriptDebugVtbl = {
VBScriptDebug_QueryInterface,
VBScriptDebug_AddRef,
VBScriptDebug_Release,
VBScriptDebug_GetScriptTextAttributes,
VBScriptDebug_GetScriptletTextAttributes,
VBScriptDebug_EnumCodeContextsOfPosition,
};
static inline VBScript *impl_from_IActiveScriptParse(IActiveScriptParse *iface)
{
return CONTAINING_RECORD(iface, VBScript, IActiveScriptParse_iface);
@ -806,6 +870,7 @@ HRESULT WINAPI VBScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *pU
return E_OUTOFMEMORY;
ret->IActiveScript_iface.lpVtbl = &VBScriptVtbl;
ret->IActiveScriptDebug_iface.lpVtbl = &VBScriptDebugVtbl;
ret->IActiveScriptParse_iface.lpVtbl = &VBScriptParseVtbl;
ret->IActiveScriptParseProcedure2_iface.lpVtbl = &VBScriptParseProcedureVtbl;
ret->IObjectSafety_iface.lpVtbl = &VBScriptSafetyVtbl;

View File

@ -25,6 +25,7 @@
#include "ole2.h"
#include "dispex.h"
#include "activscp.h"
#include "activdbg.h"
#include "vbscript_classes.h"