Type library creation, take 2, part 4 of 5
Nyef
nyef at softhome.net
Mon Jan 26 11:16:36 CST 2004
Hello all.
Attached is the fourth of five patches against typelib2.c covering
the just over two weeks of work done since the original patch.
This patch contains:
Stubbed-out implementation of the ITypeInfo2 interface for the
ICreateTypeInfo2 implementation.
Implementation of ITypeInfo2_fnGetContainingTypeLib().
Preliminary implementation of ICreateTypeInfo2_fnAddRefTypeInfo().
--Alastair Bridgewater
-------------- next part --------------
--- typelib2.c.last 2004-01-26 11:09:18.000000000 -0500
+++ typelib2.c 2004-01-26 11:28:11.000000000 -0500
@@ -117,6 +117,8 @@
typedef struct tagICreateTypeLib2Impl
{
ICOM_VFIELD(ICreateTypeLib2);
+ ICOM_VTABLE(ITypeLib2) *lpVtblTypeLib2;
+
UINT ref;
WCHAR *filename;
@@ -138,6 +140,8 @@
typedef struct tagICreateTypeInfo2Impl
{
ICOM_VFIELD(ICreateTypeInfo2);
+ ICOM_VTABLE(ITypeInfo2) *lpVtblTypeInfo2;
+
UINT ref;
ICreateTypeLib2Impl *typelib;
@@ -156,6 +160,9 @@
struct tagICreateTypeInfo2Impl *next_typeinfo;
} ICreateTypeInfo2Impl;
+#define _ITypeInfo2_Offset(impl) ((int)(&(((impl*)0)->lpVtblTypeInfo2)))
+#define ICOM_THIS_From_ITypeInfo2(impl, iface) impl* This = (impl*)(((char*)iface)-_ITypeInfo2_Offset(impl))
+
static ULONG WINAPI ICreateTypeLib2_fnRelease(ICreateTypeLib2 *iface);
@@ -876,7 +883,7 @@
*ppvObject = This;
} else if (IsEqualIID(riid, &IID_ITypeInfo) ||
IsEqualIID(riid, &IID_ITypeInfo2)) {
- FIXME("QI for ITypeInfo interfaces not supported yet.\n");
+ *ppvObject = &This->lpVtblTypeInfo2;
}
if(*ppvObject)
@@ -1071,8 +1078,37 @@
ITypeInfo* pTInfo,
HREFTYPE* phRefType)
{
- FIXME("(%p,%p,%p), stub!\n", iface, pTInfo, phRefType);
- return E_OUTOFMEMORY;
+ ICOM_THIS(ICreateTypeInfo2Impl, iface);
+
+ ITypeLib *container;
+ int index;
+ HRESULT res;
+
+ TRACE("(%p,%p,%p)\n", iface, pTInfo, phRefType);
+
+ /*
+ * If this is one of ours, we set *phRefType to the TYPEINFO offset of
+ * the referred TypeInfo. Otherwise, we presumably have more magic to do.
+ *
+ * Unfortunately, we can't rely on the passed-in TypeInfo even having the
+ * same internal structure as one of ours. It could be from another
+ * implementation of ITypeInfo. So we need to do the following...
+ */
+ res = ITypeInfo_GetContainingTypeLib(pTInfo, &container, &index);
+ if (!SUCCEEDED(res)) {
+ TRACE("failed to find containing typelib.\n");
+ return res;
+ }
+
+ if (container == (ITypeLib *)&This->typelib->lpVtblTypeLib2) {
+ *phRefType = This->typelib->typelib_typeinfo_offsets[index];
+ This->typelib->ref--; /* FIXME: no vtbl yet. */
+ return S_OK;
+ } else {
+ FIXME("(%p,%p,%p), pTInfo from different typelib.\n", iface, pTInfo, phRefType);
+ ITypeLib_Release(container);
+ return S_OK;
+ }
}
/******************************************************************************
@@ -1787,6 +1823,619 @@
return E_OUTOFMEMORY;
}
+/*================== ITypeInfo2 Implementation ===================================*/
+
+/******************************************************************************
+ * ITypeInfo2_QueryInterface {OLEAUT32}
+ *
+ * See IUnknown_QueryInterface.
+ */
+static HRESULT WINAPI ITypeInfo2_fnQueryInterface(ITypeInfo2 * iface, REFIID riid, LPVOID * ppv)
+{
+ ICOM_THIS_From_ITypeInfo2(ICreateTypeInfo2Impl, iface);
+
+ return ICreateTypeInfo2_QueryInterface((ICreateTypeInfo2 *)This, riid, ppv);
+}
+
+/******************************************************************************
+ * ITypeInfo2_AddRef {OLEAUT32}
+ *
+ * See IUnknown_AddRef.
+ */
+static ULONG WINAPI ITypeInfo2_fnAddRef(ITypeInfo2 * iface)
+{
+ ICOM_THIS_From_ITypeInfo2(ICreateTypeInfo2Impl, iface);
+
+ return ICreateTypeInfo2_AddRef((ICreateTypeInfo2 *)This);
+}
+
+/******************************************************************************
+ * ITypeInfo2_Release {OLEAUT32}
+ *
+ * See IUnknown_Release.
+ */
+static ULONG WINAPI ITypeInfo2_fnRelease(ITypeInfo2 * iface)
+{
+ ICOM_THIS_From_ITypeInfo2(ICreateTypeInfo2Impl, iface);
+
+ return ICreateTypeInfo2_Release((ICreateTypeInfo2 *)This);
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetTypeAttr {OLEAUT32}
+ *
+ * See ITypeInfo_GetTypeAttr.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetTypeAttr(
+ ITypeInfo2* iface,
+ TYPEATTR** ppTypeAttr)
+{
+ FIXME("(%p,%p), stub!\n", iface, ppTypeAttr);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetTypeComp {OLEAUT32}
+ *
+ * See ITypeInfo_GetTypeComp.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetTypeComp(
+ ITypeInfo2* iface,
+ ITypeComp** ppTComp)
+{
+ FIXME("(%p,%p), stub!\n", iface, ppTComp);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetFuncDesc {OLEAUT32}
+ *
+ * See ITypeInfo_GetFuncDesc.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetFuncDesc(
+ ITypeInfo2* iface,
+ UINT index,
+ FUNCDESC** ppFuncDesc)
+{
+ FIXME("(%p,%d,%p), stub!\n", iface, index, ppFuncDesc);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetVarDesc {OLEAUT32}
+ *
+ * See ITypeInfo_GetVarDesc.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetVarDesc(
+ ITypeInfo2* iface,
+ UINT index,
+ VARDESC** ppVarDesc)
+{
+ FIXME("(%p,%d,%p), stub!\n", iface, index, ppVarDesc);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetNames {OLEAUT32}
+ *
+ * See ITypeInfo_GetNames.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetNames(
+ ITypeInfo2* iface,
+ MEMBERID memid,
+ BSTR* rgBstrNames,
+ UINT cMaxNames,
+ UINT* pcNames)
+{
+ FIXME("(%p,%ld,%p,%d,%p), stub!\n", iface, memid, rgBstrNames, cMaxNames, pcNames);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetRefTypeOfImplType {OLEAUT32}
+ *
+ * See ITypeInfo_GetRefTypeOfImplType.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetRefTypeOfImplType(
+ ITypeInfo2* iface,
+ UINT index,
+ HREFTYPE* pRefType)
+{
+ FIXME("(%p,%d,%p), stub!\n", iface, index, pRefType);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetImplTypeFlags {OLEAUT32}
+ *
+ * See ITypeInfo_GetImplTypeFlags.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetImplTypeFlags(
+ ITypeInfo2* iface,
+ UINT index,
+ INT* pImplTypeFlags)
+{
+ FIXME("(%p,%d,%p), stub!\n", iface, index, pImplTypeFlags);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetIDsOfNames {OLEAUT32}
+ *
+ * See ITypeInfo_GetIDsOfNames.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetIDsOfNames(
+ ITypeInfo2* iface,
+ LPOLESTR* rgszNames,
+ UINT cNames,
+ MEMBERID* pMemId)
+{
+ FIXME("(%p,%p,%d,%p), stub!\n", iface, rgszNames, cNames, pMemId);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_Invoke {OLEAUT32}
+ *
+ * See ITypeInfo_Invoke.
+ */
+static HRESULT WINAPI ITypeInfo2_fnInvoke(
+ ITypeInfo2* iface,
+ PVOID pvInstance,
+ MEMBERID memid,
+ WORD wFlags,
+ DISPPARAMS* pDispParams,
+ VARIANT* pVarResult,
+ EXCEPINFO* pExcepInfo,
+ UINT* puArgErr)
+{
+ FIXME("(%p,%p,%ld,%x,%p,%p,%p,%p), stub!\n", iface, pvInstance, memid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetDocumentation {OLEAUT32}
+ *
+ * See ITypeInfo_GetDocumentation.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetDocumentation(
+ ITypeInfo2* iface,
+ MEMBERID memid,
+ BSTR* pBstrName,
+ BSTR* pBstrDocString,
+ DWORD* pdwHelpContext,
+ BSTR* pBstrHelpFile)
+{
+ FIXME("(%p,%ld,%p,%p,%p,%p), stub!\n", iface, memid, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetDllEntry {OLEAUT32}
+ *
+ * See ITypeInfo_GetDllEntry.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetDllEntry(
+ ITypeInfo2* iface,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ BSTR* pBstrDllName,
+ BSTR* pBstrName,
+ WORD* pwOrdinal)
+{
+ FIXME("(%p,%ld,%d,%p,%p,%p), stub!\n", iface, memid, invKind, pBstrDllName, pBstrName, pwOrdinal);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetRefTypeInfo {OLEAUT32}
+ *
+ * See ITypeInfo_GetRefTypeInfo.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetRefTypeInfo(
+ ITypeInfo2* iface,
+ HREFTYPE hRefType,
+ ITypeInfo** ppTInfo)
+{
+ FIXME("(%p,%ld,%p), stub!\n", iface, hRefType, ppTInfo);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_AddressOfMember {OLEAUT32}
+ *
+ * See ITypeInfo_AddressOfMember.
+ */
+static HRESULT WINAPI ITypeInfo2_fnAddressOfMember(
+ ITypeInfo2* iface,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ PVOID* ppv)
+{
+ FIXME("(%p,%ld,%d,%p), stub!\n", iface, memid, invKind, ppv);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_CreateInstance {OLEAUT32}
+ *
+ * See ITypeInfo_CreateInstance.
+ */
+static HRESULT WINAPI ITypeInfo2_fnCreateInstance(
+ ITypeInfo2* iface,
+ IUnknown* pUnkOuter,
+ REFIID riid,
+ PVOID* ppvObj)
+{
+ FIXME("(%p,%p,%s,%p), stub!\n", iface, pUnkOuter, debugstr_guid(riid), ppvObj);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetMops {OLEAUT32}
+ *
+ * See ITypeInfo_GetMops.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetMops(
+ ITypeInfo2* iface,
+ MEMBERID memid,
+ BSTR* pBstrMops)
+{
+ FIXME("(%p,%ld,%p), stub!\n", iface, memid, pBstrMops);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetContainingTypeLib {OLEAUT32}
+ *
+ * See ITypeInfo_GetContainingTypeLib.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetContainingTypeLib(
+ ITypeInfo2* iface,
+ ITypeLib** ppTLib,
+ UINT* pIndex)
+{
+ ICOM_THIS_From_ITypeInfo2(ICreateTypeInfo2Impl, iface);
+
+ TRACE("(%p,%p,%p)\n", iface, ppTLib, pIndex);
+
+ *ppTLib = (ITypeLib *)&This->typelib->lpVtblTypeLib2;
+ This->typelib->ref++;
+ *pIndex = This->typeinfo->typekind >> 16;
+
+ return S_OK;
+}
+
+/******************************************************************************
+ * ITypeInfo2_ReleaseTypeAttr {OLEAUT32}
+ *
+ * See ITypeInfo_ReleaseTypeAttr.
+ */
+static void WINAPI ITypeInfo2_fnReleaseTypeAttr(
+ ITypeInfo2* iface,
+ TYPEATTR* pTypeAttr)
+{
+ FIXME("(%p,%p), stub!\n", iface, pTypeAttr);
+}
+
+/******************************************************************************
+ * ITypeInfo2_ReleaseFuncDesc {OLEAUT32}
+ *
+ * See ITypeInfo_ReleaseFuncDesc.
+ */
+static void WINAPI ITypeInfo2_fnReleaseFuncDesc(
+ ITypeInfo2* iface,
+ FUNCDESC* pFuncDesc)
+{
+ FIXME("(%p,%p), stub!\n", iface, pFuncDesc);
+}
+
+/******************************************************************************
+ * ITypeInfo2_ReleaseVarDesc {OLEAUT32}
+ *
+ * See ITypeInfo_ReleaseVarDesc.
+ */
+static void WINAPI ITypeInfo2_fnReleaseVarDesc(
+ ITypeInfo2* iface,
+ VARDESC* pVarDesc)
+{
+ FIXME("(%p,%p), stub!\n", iface, pVarDesc);
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetTypeKind {OLEAUT32}
+ *
+ * Get the TYPEKIND value for a TypeInfo.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetTypeKind(
+ ITypeInfo2* iface, /* [I] The TypeInfo to obtain the typekind for. */
+ TYPEKIND* pTypeKind) /* [O] The typekind for this TypeInfo. */
+{
+ FIXME("(%p,%p), stub!\n", iface, pTypeKind);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetTypeFlags {OLEAUT32}
+ *
+ * Get the Type Flags for a TypeInfo.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetTypeFlags(
+ ITypeInfo2* iface, /* [I] The TypeInfo to obtain the typeflags for. */
+ ULONG* pTypeFlags) /* [O] The type flags for this TypeInfo. */
+{
+ FIXME("(%p,%p), stub!\n", iface, pTypeFlags);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetFuncIndexOfMemId {OLEAUT32}
+ *
+ * Gets the index of a function given its member id.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetFuncIndexOfMemId(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the function. */
+ MEMBERID memid, /* [I] The member id for the function. */
+ INVOKEKIND invKind, /* [I] The invocation kind for the function. */
+ UINT* pFuncIndex) /* [O] The index of the function. */
+{
+ FIXME("(%p,%ld,%d,%p), stub!\n", iface, memid, invKind, pFuncIndex);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetVarIndexOfMemId {OLEAUT32}
+ *
+ * Gets the index of a variable given its member id.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetVarIndexOfMemId(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the variable. */
+ MEMBERID memid, /* [I] The member id for the variable. */
+ UINT* pVarIndex) /* [O] The index of the variable. */
+{
+ FIXME("(%p,%ld,%p), stub!\n", iface, memid, pVarIndex);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetCustData {OLEAUT32}
+ *
+ * Gets a custom data element from a TypeInfo.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetCustData(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the custom data. */
+ REFGUID guid, /* [I] The GUID under which the custom data is stored. */
+ VARIANT* pVarVal) /* [O] The custom data. */
+{
+ FIXME("(%p,%s,%p), stub!\n", iface, debugstr_guid(guid), pVarVal);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetFuncCustData {OLEAUT32}
+ *
+ * Gets a custom data element from a function.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetFuncCustData(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the custom data. */
+ UINT index, /* [I] The index of the function for which to retrieve the custom data. */
+ REFGUID guid, /* [I] The GUID under which the custom data is stored. */
+ VARIANT* pVarVal) /* [O] The custom data. */
+{
+ FIXME("(%p,%d,%s,%p), stub!\n", iface, index, debugstr_guid(guid), pVarVal);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetParamCustData {OLEAUT32}
+ *
+ * Gets a custom data element from a parameter.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetParamCustData(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the custom data. */
+ UINT indexFunc, /* [I] The index of the function for which to retrieve the custom data. */
+ UINT indexParam, /* [I] The index of the parameter for which to retrieve the custom data. */
+ REFGUID guid, /* [I] The GUID under which the custom data is stored. */
+ VARIANT* pVarVal) /* [O] The custom data. */
+{
+ FIXME("(%p,%d,%d,%s,%p), stub!\n", iface, indexFunc, indexParam, debugstr_guid(guid), pVarVal);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetVarCustData {OLEAUT32}
+ *
+ * Gets a custom data element from a variable.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetVarCustData(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the custom data. */
+ UINT index, /* [I] The index of the variable for which to retrieve the custom data. */
+ REFGUID guid, /* [I] The GUID under which the custom data is stored. */
+ VARIANT* pVarVal) /* [O] The custom data. */
+{
+ FIXME("(%p,%d,%s,%p), stub!\n", iface, index, debugstr_guid(guid), pVarVal);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetImplTypeCustData {OLEAUT32}
+ *
+ * Gets a custom data element from an implemented type of a TypeInfo.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetImplTypeCustData(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the custom data. */
+ UINT index, /* [I] The index of the implemented type for which to retrieve the custom data. */
+ REFGUID guid, /* [I] The GUID under which the custom data is stored. */
+ VARIANT* pVarVal) /* [O] The custom data. */
+{
+ FIXME("(%p,%d,%s,%p), stub!\n", iface, index, debugstr_guid(guid), pVarVal);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetDocumentation2 {OLEAUT32}
+ *
+ * Gets some documentation from a TypeInfo in a locale-aware fashion.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of STG_E_INSUFFICIENTMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetDocumentation2(
+ ITypeInfo2* iface, /* [I] The TypeInfo to retrieve the documentation from. */
+ MEMBERID memid, /* [I] The member id (why?). */
+ LCID lcid, /* [I] The locale (why?). */
+ BSTR* pbstrHelpString, /* [O] The help string. */
+ DWORD* pdwHelpStringContext, /* [O] The help string context. */
+ BSTR* pbstrHelpStringDll) /* [O] The help file name. */
+{
+ FIXME("(%p,%ld,%ld,%p,%p,%p), stub!\n", iface, memid, lcid, pbstrHelpString, pdwHelpStringContext, pbstrHelpStringDll);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetAllCustData {OLEAUT32}
+ *
+ * Gets all of the custom data associated with a TypeInfo.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetAllCustData(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the custom data. */
+ CUSTDATA* pCustData) /* [O] A pointer to the custom data. */
+{
+ FIXME("(%p,%p), stub!\n", iface, pCustData);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetAllFuncCustData {OLEAUT32}
+ *
+ * Gets all of the custom data associated with a function.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetAllFuncCustData(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the custom data. */
+ UINT index, /* [I] The index of the function for which to retrieve the custom data. */
+ CUSTDATA* pCustData) /* [O] A pointer to the custom data. */
+{
+ FIXME("(%p,%d,%p), stub!\n", iface, index, pCustData);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetAllParamCustData {OLEAUT32}
+ *
+ * Gets all of the custom data associated with a parameter.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetAllParamCustData(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the custom data. */
+ UINT indexFunc, /* [I] The index of the function for which to retrieve the custom data. */
+ UINT indexParam, /* [I] The index of the parameter for which to retrieve the custom data. */
+ CUSTDATA* pCustData) /* [O] A pointer to the custom data. */
+{
+ FIXME("(%p,%d,%d,%p), stub!\n", iface, indexFunc, indexParam, pCustData);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetAllVarCustData {OLEAUT32}
+ *
+ * Gets all of the custom data associated with a variable.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetAllVarCustData(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the custom data. */
+ UINT index, /* [I] The index of the variable for which to retrieve the custom data. */
+ CUSTDATA* pCustData) /* [O] A pointer to the custom data. */
+{
+ FIXME("(%p,%d,%p), stub!\n", iface, index, pCustData);
+ return E_OUTOFMEMORY;
+}
+
+/******************************************************************************
+ * ITypeInfo2_GetAllImplTypeCustData {OLEAUT32}
+ *
+ * Gets all of the custom data associated with an implemented type.
+ *
+ * RETURNS
+ *
+ * Success: S_OK.
+ * Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
+ */
+static HRESULT WINAPI ITypeInfo2_fnGetAllImplTypeCustData(
+ ITypeInfo2* iface, /* [I] The TypeInfo in which to find the custom data. */
+ UINT index, /* [I] The index of the implemented type for which to retrieve the custom data. */
+ CUSTDATA* pCustData) /* [O] A pointer to the custom data. */
+{
+ FIXME("(%p,%d,%p), stub!\n", iface, index, pCustData);
+ return E_OUTOFMEMORY;
+}
+
+
+/*================== ICreateTypeInfo2 & ITypeInfo2 VTABLEs And Creation ===================================*/
static ICOM_VTABLE(ICreateTypeInfo2) ctypeinfo2vt =
{
@@ -1837,6 +2486,51 @@
ICreateTypeInfo2_fnSetName
};
+static ICOM_VTABLE(ITypeInfo2) typeinfo2vt =
+{
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+
+ ITypeInfo2_fnQueryInterface,
+ ITypeInfo2_fnAddRef,
+ ITypeInfo2_fnRelease,
+
+ ITypeInfo2_fnGetTypeAttr,
+ ITypeInfo2_fnGetTypeComp,
+ ITypeInfo2_fnGetFuncDesc,
+ ITypeInfo2_fnGetVarDesc,
+ ITypeInfo2_fnGetNames,
+ ITypeInfo2_fnGetRefTypeOfImplType,
+ ITypeInfo2_fnGetImplTypeFlags,
+ ITypeInfo2_fnGetIDsOfNames,
+ ITypeInfo2_fnInvoke,
+ ITypeInfo2_fnGetDocumentation,
+ ITypeInfo2_fnGetDllEntry,
+ ITypeInfo2_fnGetRefTypeInfo,
+ ITypeInfo2_fnAddressOfMember,
+ ITypeInfo2_fnCreateInstance,
+ ITypeInfo2_fnGetMops,
+ ITypeInfo2_fnGetContainingTypeLib,
+ ITypeInfo2_fnReleaseTypeAttr,
+ ITypeInfo2_fnReleaseFuncDesc,
+ ITypeInfo2_fnReleaseVarDesc,
+
+ ITypeInfo2_fnGetTypeKind,
+ ITypeInfo2_fnGetTypeFlags,
+ ITypeInfo2_fnGetFuncIndexOfMemId,
+ ITypeInfo2_fnGetVarIndexOfMemId,
+ ITypeInfo2_fnGetCustData,
+ ITypeInfo2_fnGetFuncCustData,
+ ITypeInfo2_fnGetParamCustData,
+ ITypeInfo2_fnGetVarCustData,
+ ITypeInfo2_fnGetImplTypeCustData,
+ ITypeInfo2_fnGetDocumentation2,
+ ITypeInfo2_fnGetAllCustData,
+ ITypeInfo2_fnGetAllFuncCustData,
+ ITypeInfo2_fnGetAllParamCustData,
+ ITypeInfo2_fnGetAllVarCustData,
+ ITypeInfo2_fnGetAllImplTypeCustData,
+};
+
static ICreateTypeInfo2 *ICreateTypeInfo2_Constructor(ICreateTypeLib2Impl *typelib, WCHAR *szName, TYPEKIND tkind)
{
ICreateTypeInfo2Impl *pCreateTypeInfo2Impl;
@@ -1851,6 +2545,7 @@
if (!pCreateTypeInfo2Impl) return NULL;
pCreateTypeInfo2Impl->lpVtbl = &ctypeinfo2vt;
+ pCreateTypeInfo2Impl->lpVtblTypeInfo2 = &typeinfo2vt;
pCreateTypeInfo2Impl->ref = 1;
pCreateTypeInfo2Impl->typelib = typelib;
More information about the wine-patches
mailing list