rpcrt4: Fill in the IRpcStubBuffer vtables for interfaces that don't
already have them filled in.
This commit is contained in:
parent
be13d154c6
commit
b670ec83fd
|
@ -137,9 +137,24 @@ HRESULT WINAPI NdrDllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv,
|
||||||
|
|
||||||
*ppv = NULL;
|
*ppv = NULL;
|
||||||
if (!pPSFactoryBuffer->lpVtbl) {
|
if (!pPSFactoryBuffer->lpVtbl) {
|
||||||
|
const ProxyFileInfo **pProxyFileList2;
|
||||||
pPSFactoryBuffer->lpVtbl = &CStdPSFactory_Vtbl;
|
pPSFactoryBuffer->lpVtbl = &CStdPSFactory_Vtbl;
|
||||||
pPSFactoryBuffer->RefCount = 0;
|
pPSFactoryBuffer->RefCount = 0;
|
||||||
pPSFactoryBuffer->pProxyFileList = pProxyFileList;
|
pPSFactoryBuffer->pProxyFileList = pProxyFileList;
|
||||||
|
for (pProxyFileList2 = pProxyFileList; *pProxyFileList2; pProxyFileList2++) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < (*pProxyFileList2)->TableSize; i++) {
|
||||||
|
/* FIXME: i think that different vtables should be copied for
|
||||||
|
* async interfaces */
|
||||||
|
void * const *pSrcRpcStubVtbl = (void * const *)&CStdStubBuffer_Vtbl;
|
||||||
|
void **pRpcStubVtbl = (void **)&(*pProxyFileList2)->pStubVtblList[i]->Vtbl;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
for (j = 0; j < sizeof(IRpcStubBufferVtbl)/sizeof(void *); j++)
|
||||||
|
if (!pRpcStubVtbl[j])
|
||||||
|
pRpcStubVtbl[j] = pSrcRpcStubVtbl[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (IsEqualGUID(rclsid, pclsid))
|
if (IsEqualGUID(rclsid, pclsid))
|
||||||
return IPSFactoryBuffer_QueryInterface((LPPSFACTORYBUFFER)pPSFactoryBuffer, iid, ppv);
|
return IPSFactoryBuffer_QueryInterface((LPPSFACTORYBUFFER)pPSFactoryBuffer, iid, ppv);
|
||||||
|
|
|
@ -42,4 +42,6 @@ HRESULT WINAPI CStdStubBuffer_Construct(REFIID riid,
|
||||||
|
|
||||||
const MIDL_SERVER_INFO *CStdStubBuffer_GetServerInfo(IRpcStubBuffer *iface);
|
const MIDL_SERVER_INFO *CStdStubBuffer_GetServerInfo(IRpcStubBuffer *iface);
|
||||||
|
|
||||||
|
const IRpcStubBufferVtbl CStdStubBuffer_Vtbl;
|
||||||
|
|
||||||
#endif /* __WINE_CPSF_H */
|
#endif /* __WINE_CPSF_H */
|
||||||
|
|
|
@ -181,6 +181,20 @@ void WINAPI CStdStubBuffer_DebugServerRelease(LPRPCSTUBBUFFER iface,
|
||||||
TRACE("(%p)->DebugServerRelease(%p)\n",This,pv);
|
TRACE("(%p)->DebugServerRelease(%p)\n",This,pv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const IRpcStubBufferVtbl CStdStubBuffer_Vtbl =
|
||||||
|
{
|
||||||
|
CStdStubBuffer_QueryInterface,
|
||||||
|
CStdStubBuffer_AddRef,
|
||||||
|
NULL,
|
||||||
|
CStdStubBuffer_Connect,
|
||||||
|
CStdStubBuffer_Disconnect,
|
||||||
|
CStdStubBuffer_Invoke,
|
||||||
|
CStdStubBuffer_IsIIDSupported,
|
||||||
|
CStdStubBuffer_CountRefs,
|
||||||
|
CStdStubBuffer_DebugServerQueryInterface,
|
||||||
|
CStdStubBuffer_DebugServerRelease
|
||||||
|
};
|
||||||
|
|
||||||
const MIDL_SERVER_INFO *CStdStubBuffer_GetServerInfo(IRpcStubBuffer *iface)
|
const MIDL_SERVER_INFO *CStdStubBuffer_GetServerInfo(IRpcStubBuffer *iface)
|
||||||
{
|
{
|
||||||
CStdStubBuffer *This = (CStdStubBuffer *)iface;
|
CStdStubBuffer *This = (CStdStubBuffer *)iface;
|
||||||
|
|
Loading…
Reference in New Issue