From 161f60071e652f9083a63b01297a3552f58994e7 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Mon, 28 Aug 2006 19:05:36 +0100 Subject: [PATCH] rpcrt4: Add a helper function to create a stub. --- dlls/rpcrt4/cpsf.h | 2 ++ dlls/rpcrt4/ndr_ole.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/dlls/rpcrt4/cpsf.h b/dlls/rpcrt4/cpsf.h index df8acedcfb5..9c3d917b6bb 100644 --- a/dlls/rpcrt4/cpsf.h +++ b/dlls/rpcrt4/cpsf.h @@ -44,4 +44,6 @@ const MIDL_SERVER_INFO *CStdStubBuffer_GetServerInfo(IRpcStubBuffer *iface); const IRpcStubBufferVtbl CStdStubBuffer_Vtbl; +HRESULT create_stub(REFIID iid, IUnknown *pUnk, IRpcStubBuffer **ppstub); + #endif /* __WINE_CPSF_H */ diff --git a/dlls/rpcrt4/ndr_ole.c b/dlls/rpcrt4/ndr_ole.c index 0f64edded15..2e4c67b6df1 100644 --- a/dlls/rpcrt4/ndr_ole.c +++ b/dlls/rpcrt4/ndr_ole.c @@ -39,7 +39,9 @@ #include "ndr_misc.h" #include "rpcndr.h" +#include "rpcproxy.h" #include "wine/rpcfc.h" +#include "cpsf.h" #include "wine/debug.h" @@ -364,3 +366,27 @@ void WINAPI NdrOleFree(void *NodeToFree) if (!LoadCOM()) return; COM_MemFree(NodeToFree); } + +/*********************************************************************** + * Helper function to create a stub. + * This probably looks very much like NdrpCreateStub. + */ +HRESULT create_stub(REFIID iid, IUnknown *pUnk, IRpcStubBuffer **ppstub) +{ + CLSID clsid; + IPSFactoryBuffer *psfac; + HRESULT r; + + if(!LoadCOM()) return E_FAIL; + + r = COM_GetPSClsid( iid, &clsid ); + if(FAILED(r)) return r; + + r = COM_GetClassObject( &clsid, CLSCTX_INPROC_SERVER, NULL, &IID_IPSFactoryBuffer, (void**)&psfac ); + if(FAILED(r)) return r; + + r = IPSFactoryBuffer_CreateStub(psfac, iid, pUnk, ppstub); + + IPSFactoryBuffer_Release(psfac); + return r; +}