Huw Davies : msdaps: Make use of the row server in ICreateRow_CreateRow.
Alexandre Julliard
julliard at winehq.org
Wed Feb 3 09:33:06 CST 2010
Module: wine
Branch: master
Commit: 3d2464b84065a164e5352e21aa35cf0f37f1f17e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3d2464b84065a164e5352e21aa35cf0f37f1f17e
Author: Huw Davies <huw at codeweavers.com>
Date: Wed Feb 3 12:02:49 2010 +0000
msdaps: Make use of the row server in ICreateRow_CreateRow.
---
dlls/msdaps/usrmarshal.c | 33 +++++++++++++++++++++++++++++++--
1 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/dlls/msdaps/usrmarshal.c b/dlls/msdaps/usrmarshal.c
index 0624c3a..a2cea91 100644
--- a/dlls/msdaps/usrmarshal.c
+++ b/dlls/msdaps/usrmarshal.c
@@ -33,6 +33,8 @@
#include "oleauto.h"
#include "oledb.h"
+#include "row_server.h"
+
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(oledb);
@@ -482,6 +484,12 @@ HRESULT CALLBACK ICreateRow_CreateRow_Proxy(ICreateRow* This, IUnknown *pUnkOute
TRACE("(%p, %p, %s, %08x, %s, %s, %p, %p, %p, %p, %p)\n", This, pUnkOuter, debugstr_w(pwszURL), dwBindURLFlags,
debugstr_guid(rguid), debugstr_guid(riid), pAuthenticate, pImplSession, pdwBindStatus, ppwszNewURL, ppUnk);
+ if(pUnkOuter)
+ {
+ FIXME("Aggregation not supported\n");
+ return CLASS_E_NOAGGREGATION;
+ }
+
hr = ICreateRow_RemoteCreateRow_Proxy(This, pUnkOuter, pwszURL, dwBindURLFlags, rguid, riid, pAuthenticate,
pImplSession ? pImplSession->pUnkOuter : NULL, pImplSession ? pImplSession->piid : NULL,
pImplSession ? &pImplSession->pSession : NULL, pdwBindStatus, ppwszNewURL, ppUnk);
@@ -495,17 +503,38 @@ HRESULT __RPC_STUB ICreateRow_CreateRow_Stub(ICreateRow* This, IUnknown *pUnkOut
{
HRESULT hr;
DBIMPLICITSESSION impl_session;
+ IWineRowServer *row_server;
+ IMarshal *marshal;
+ IUnknown *obj;
TRACE("(%p, %p, %s, %08x, %s, %s, %p, %p, %p, %p, %p, %p, %p)\n", This, pUnkOuter, debugstr_w(pwszURL), dwBindURLFlags,
debugstr_guid(rguid), debugstr_guid(riid), pAuthenticate, pSessionUnkOuter, piid, ppSession, pdwBindStatus, ppwszNewURL,
ppUnk);
+ *ppUnk = NULL;
+
+ hr = CoCreateInstance(&CLSID_wine_row_server, NULL, CLSCTX_INPROC_SERVER, &IID_IWineRowServer, (void**)&row_server);
+ if(FAILED(hr)) return hr;
+
impl_session.pUnkOuter = pSessionUnkOuter;
impl_session.piid = piid;
impl_session.pSession = NULL;
- hr = ICreateRow_CreateRow(This, pUnkOuter, pwszURL, dwBindURLFlags, rguid, riid, pAuthenticate,
- ppSession ? &impl_session : NULL, pdwBindStatus, ppwszNewURL, ppUnk);
+ IWineRowServer_GetMarshal(row_server, &marshal);
+
+ hr = ICreateRow_CreateRow(This, (IUnknown*) marshal, pwszURL, dwBindURLFlags, rguid, &IID_IUnknown, pAuthenticate,
+ ppSession ? &impl_session : NULL, pdwBindStatus, ppwszNewURL, &obj);
+ IMarshal_Release(marshal);
+
+ if(FAILED(hr))
+ {
+ IWineRowServer_Release(row_server);
+ return hr;
+ }
+
+ IWineRowServer_SetInnerUnk(row_server, obj);
+ hr = IUnknown_QueryInterface(obj, riid, (void**)ppUnk);
+ IUnknown_Release(obj);
if(ppSession) *ppSession = impl_session.pSession;
return hr;
More information about the wine-cvs
mailing list