Implement CreateDispTypeInfo.
This commit is contained in:
parent
1685e8c65e
commit
ddae24c50b
@ -180,28 +180,6 @@ HRESULT WINAPI CreateStdDispatch(
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* CreateDispTypeInfo [OLEAUT32.31]
|
|
||||||
*
|
|
||||||
* Build type information for an object so it can be called through an
|
|
||||||
* IDispatch interface.
|
|
||||||
*
|
|
||||||
* RETURNS
|
|
||||||
* Success: S_OK. pptinfo contains the created ITypeInfo object.
|
|
||||||
* Failure: E_INVALIDARG, if one or more arguments is invalid.
|
|
||||||
*
|
|
||||||
* NOTES
|
|
||||||
* This call allows an objects methods to be accessed through IDispatch, by
|
|
||||||
* building an ITypeInfo object that IDispatch can use to call through.
|
|
||||||
*/
|
|
||||||
HRESULT WINAPI CreateDispTypeInfo(
|
|
||||||
INTERFACEDATA *pidata, /* [I] Description of the interface to build type info for */
|
|
||||||
LCID lcid, /* [I] Locale Id */
|
|
||||||
ITypeInfo **pptinfo) /* [O] Destination for created ITypeInfo object */
|
|
||||||
{
|
|
||||||
FIXME("(%p,%ld,%p),stub\n",pidata,lcid,pptinfo);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* IDispatch {OLEAUT32}
|
* IDispatch {OLEAUT32}
|
||||||
|
@ -5739,6 +5739,75 @@ static ITypeInfo2Vtbl tinfvt =
|
|||||||
ITypeInfo2_fnGetAllImplTypeCustData,
|
ITypeInfo2_fnGetAllImplTypeCustData,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* CreateDispTypeInfo [OLEAUT32.31]
|
||||||
|
*
|
||||||
|
* Build type information for an object so it can be called through an
|
||||||
|
* IDispatch interface.
|
||||||
|
*
|
||||||
|
* RETURNS
|
||||||
|
* Success: S_OK. pptinfo contains the created ITypeInfo object.
|
||||||
|
* Failure: E_INVALIDARG, if one or more arguments is invalid.
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
* This call allows an objects methods to be accessed through IDispatch, by
|
||||||
|
* building an ITypeInfo object that IDispatch can use to call through.
|
||||||
|
*/
|
||||||
|
HRESULT WINAPI CreateDispTypeInfo(
|
||||||
|
INTERFACEDATA *pidata, /* [I] Description of the interface to build type info for */
|
||||||
|
LCID lcid, /* [I] Locale Id */
|
||||||
|
ITypeInfo **pptinfo) /* [O] Destination for created ITypeInfo object */
|
||||||
|
{
|
||||||
|
ITypeInfoImpl *pTIImpl;
|
||||||
|
int param, func;
|
||||||
|
TLBFuncDesc **ppFuncDesc;
|
||||||
|
|
||||||
|
pTIImpl = (ITypeInfoImpl*)ITypeInfo_Constructor();
|
||||||
|
pTIImpl->pTypeLib = NULL;
|
||||||
|
pTIImpl->index = 0;
|
||||||
|
pTIImpl->Name = NULL;
|
||||||
|
pTIImpl->dwHelpContext = -1;
|
||||||
|
memset(&pTIImpl->TypeAttr.guid, 0, sizeof(GUID));
|
||||||
|
pTIImpl->TypeAttr.lcid = lcid;
|
||||||
|
pTIImpl->TypeAttr.typekind = TKIND_COCLASS;
|
||||||
|
pTIImpl->TypeAttr.wMajorVerNum = 0;
|
||||||
|
pTIImpl->TypeAttr.wMinorVerNum = 0;
|
||||||
|
pTIImpl->TypeAttr.cbAlignment = 2;
|
||||||
|
pTIImpl->TypeAttr.cbSizeInstance = -1;
|
||||||
|
pTIImpl->TypeAttr.cbSizeVft = -1;
|
||||||
|
pTIImpl->TypeAttr.cFuncs = 0;
|
||||||
|
pTIImpl->TypeAttr.cImplTypes = 1;
|
||||||
|
pTIImpl->TypeAttr.cVars = 0;
|
||||||
|
pTIImpl->TypeAttr.wTypeFlags = 0;
|
||||||
|
|
||||||
|
ppFuncDesc = &pTIImpl->funclist;
|
||||||
|
for(func = 0; func < pidata->cMembers; func++) {
|
||||||
|
METHODDATA *md = pidata->pmethdata + func;
|
||||||
|
*ppFuncDesc = HeapAlloc(GetProcessHeap(), 0, sizeof(**ppFuncDesc));
|
||||||
|
(*ppFuncDesc)->Name = SysAllocString(md->szName);
|
||||||
|
(*ppFuncDesc)->funcdesc.memid = md->dispid;
|
||||||
|
(*ppFuncDesc)->funcdesc.invkind = md->wFlags;
|
||||||
|
(*ppFuncDesc)->funcdesc.callconv = md->cc;
|
||||||
|
(*ppFuncDesc)->funcdesc.cParams = md->cArgs;
|
||||||
|
(*ppFuncDesc)->funcdesc.cParamsOpt = 0;
|
||||||
|
(*ppFuncDesc)->funcdesc.oVft = md->iMeth;
|
||||||
|
(*ppFuncDesc)->funcdesc.wFuncFlags = 0; /*??*/
|
||||||
|
(*ppFuncDesc)->funcdesc.elemdescFunc.tdesc.vt = md->vtReturn;
|
||||||
|
(*ppFuncDesc)->funcdesc.lprgelemdescParam = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
|
||||||
|
md->cArgs * sizeof(ELEMDESC));
|
||||||
|
(*ppFuncDesc)->pParamDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
|
||||||
|
md->cArgs * sizeof(TLBParDesc));
|
||||||
|
for(param = 0; param < md->cArgs; param++) {
|
||||||
|
(*ppFuncDesc)->funcdesc.lprgelemdescParam[param].tdesc.vt = md->ppdata[param].vt;
|
||||||
|
(*ppFuncDesc)->pParamDesc[param].Name = SysAllocString(md->ppdata[param].szName);
|
||||||
|
}
|
||||||
|
ppFuncDesc = &(*ppFuncDesc)->next;
|
||||||
|
}
|
||||||
|
*pptinfo = (ITypeInfo*)pTIImpl;
|
||||||
|
return S_OK;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI ITypeComp_fnQueryInterface(ITypeComp * iface, REFIID riid, LPVOID * ppv)
|
static HRESULT WINAPI ITypeComp_fnQueryInterface(ITypeComp * iface, REFIID riid, LPVOID * ppv)
|
||||||
{
|
{
|
||||||
ICOM_THIS_From_ITypeComp(ITypeInfoImpl, iface);
|
ICOM_THIS_From_ITypeComp(ITypeInfoImpl, iface);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user