[PATCH 01/12] vbscript: Implement ScriptTypeInfo_GetContainingTypeLib.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Mon Jan 27 09:32:56 CST 2020
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/vbscript/vbdisp.c | 153 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 151 insertions(+), 2 deletions(-)
diff --git a/dlls/vbscript/vbdisp.c b/dlls/vbscript/vbdisp.c
index c14cd7b..ed21a04 100644
--- a/dlls/vbscript/vbdisp.c
+++ b/dlls/vbscript/vbdisp.c
@@ -537,6 +537,7 @@ struct typeinfo_func {
typedef struct {
ITypeInfo ITypeInfo_iface;
ITypeComp ITypeComp_iface;
+ ITypeLib typelib_ITypeLib_iface;
LONG ref;
UINT num_vars;
@@ -576,6 +577,11 @@ static inline ScriptTypeInfo *ScriptTypeInfo_from_ITypeComp(ITypeComp *iface)
return CONTAINING_RECORD(iface, ScriptTypeInfo, ITypeComp_iface);
}
+static inline ScriptTypeInfo *ScriptTypeInfo_from_typelib_ITypeLib(ITypeLib *iface)
+{
+ return CONTAINING_RECORD(iface, ScriptTypeInfo, typelib_ITypeLib_iface);
+}
+
static HRESULT WINAPI ScriptTypeInfo_QueryInterface(ITypeInfo *iface, REFIID riid, void **ppv)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
@@ -1037,9 +1043,14 @@ static HRESULT WINAPI ScriptTypeInfo_GetContainingTypeLib(ITypeInfo *iface, ITyp
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
- FIXME("(%p)->(%p %p)\n", This, ppTLib, pIndex);
+ TRACE("(%p)->(%p %p)\n", This, ppTLib, pIndex);
- return E_NOTIMPL;
+ if (pIndex) *pIndex = 0;
+ if (!ppTLib) return S_OK;
+
+ *ppTLib = &This->typelib_ITypeLib_iface;
+ ITypeInfo_AddRef(&This->ITypeInfo_iface);
+ return S_OK;
}
static void WINAPI ScriptTypeInfo_ReleaseTypeAttr(ITypeInfo *iface, TYPEATTR *pTypeAttr)
@@ -1201,6 +1212,143 @@ static const ITypeCompVtbl ScriptTypeCompVtbl = {
ScriptTypeComp_BindType
};
+static HRESULT WINAPI ScriptTypeLib_QueryInterface(ITypeLib *iface, REFIID riid, void **ppv)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+
+ if (IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_ITypeLib, riid))
+ *ppv = &This->typelib_ITypeLib_iface;
+ else
+ {
+ WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+ *ppv = NULL;
+ return E_NOINTERFACE;
+ }
+
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+}
+
+static ULONG WINAPI ScriptTypeLib_AddRef(ITypeLib *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+ return ITypeInfo_AddRef(&This->ITypeInfo_iface);
+}
+
+static ULONG WINAPI ScriptTypeLib_Release(ITypeLib *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+ return ITypeInfo_Release(&This->ITypeInfo_iface);
+}
+
+static UINT WINAPI ScriptTypeLib_GetTypeInfoCount(ITypeLib *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+
+ TRACE("(%p)\n", This);
+
+ return 1;
+}
+
+static HRESULT WINAPI ScriptTypeLib_GetTypeInfo(ITypeLib *iface, UINT index, ITypeInfo **ppTInfo)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, ppTInfo);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeLib_GetTypeInfoType(ITypeLib *iface, UINT index, TYPEKIND *pTKind)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, pTKind);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeLib_GetTypeInfoOfGuid(ITypeLib *iface, REFGUID guid, ITypeInfo **ppTinfo)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+
+ FIXME("(%p)->(%s %p)\n", This, debugstr_guid(guid), ppTinfo);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeLib_GetLibAttr(ITypeLib *iface, TLIBATTR **ppTLibAttr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+
+ FIXME("(%p)->(%p)\n", This, ppTLibAttr);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeLib_GetTypeComp(ITypeLib *iface, ITypeComp **ppTComp)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+
+ FIXME("(%p)->(%p)\n", This, ppTComp);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeLib_GetDocumentation(ITypeLib *iface, INT index, BSTR *pBstrName,
+ BSTR *pBstrDocString, DWORD *pdwHelpContext, BSTR *pBstrHelpFile)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+
+ FIXME("(%p)->(%d %p %p %p %p)\n", This, index, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeLib_IsName(ITypeLib *iface, LPOLESTR szNameBuf, ULONG lHashVal, BOOL *pfName)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+
+ FIXME("(%p)->(%s %08x %p)\n", This, debugstr_w(szNameBuf), lHashVal, pfName);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeLib_FindName(ITypeLib *iface, LPOLESTR szNameBuf, ULONG lHashVal,
+ ITypeInfo **ppTInfo, MEMBERID *rgMemId, USHORT *pcFound)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+
+ FIXME("(%p)->(%s %08x %p %p %p)\n", This, debugstr_w(szNameBuf), lHashVal,
+ ppTInfo, rgMemId, pcFound);
+
+ return E_NOTIMPL;
+}
+
+static void WINAPI ScriptTypeLib_ReleaseTLibAttr(ITypeLib *iface, TLIBATTR *pTLibAttr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+
+ FIXME("(%p)->(%p)\n", This, pTLibAttr);
+}
+
+static const ITypeLibVtbl ScriptTypeLibVtbl = {
+ ScriptTypeLib_QueryInterface,
+ ScriptTypeLib_AddRef,
+ ScriptTypeLib_Release,
+ ScriptTypeLib_GetTypeInfoCount,
+ ScriptTypeLib_GetTypeInfo,
+ ScriptTypeLib_GetTypeInfoType,
+ ScriptTypeLib_GetTypeInfoOfGuid,
+ ScriptTypeLib_GetLibAttr,
+ ScriptTypeLib_GetTypeComp,
+ ScriptTypeLib_GetDocumentation,
+ ScriptTypeLib_IsName,
+ ScriptTypeLib_FindName,
+ ScriptTypeLib_ReleaseTLibAttr
+};
+
static inline ScriptDisp *ScriptDisp_from_IDispatchEx(IDispatchEx *iface)
{
return CONTAINING_RECORD(iface, ScriptDisp, IDispatchEx_iface);
@@ -1293,6 +1441,7 @@ static HRESULT WINAPI ScriptDisp_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LC
type_info->ITypeInfo_iface.lpVtbl = &ScriptTypeInfoVtbl;
type_info->ITypeComp_iface.lpVtbl = &ScriptTypeCompVtbl;
+ type_info->typelib_ITypeLib_iface.lpVtbl = &ScriptTypeLibVtbl;
type_info->ref = 1;
type_info->num_funcs = num_funcs;
type_info->num_vars = This->global_vars_cnt;
--
2.21.0
More information about the wine-devel
mailing list