Re: dpnet: Add stubbed interface IDirectPlay8Server
Hello Alistair, On 01/08/2014 06:26 AM, Alistair Leslie-Hughes wrote:
Changelog: dpnet: Add stubbed interface IDirectPlay8Server
diff --git a/dlls/dpnet/dpnet_private.h b/dlls/dpnet/dpnet_private.h index 72012cd..5195d51 100644 --- a/dlls/dpnet/dpnet_private.h +++ b/dlls/dpnet/dpnet_private.h @@ -37,6 +37,7 @@ typedef struct IDirectPlay8AddressImpl IDirectPlay8AddressImpl; typedef struct IDirectPlay8LobbiedApplicationImpl IDirectPlay8LobbiedApplicationImpl; typedef struct IDirectPlay8PeerImpl IDirectPlay8PeerImpl; typedef struct IDirectPlay8ThreadPoolImpl IDirectPlay8ThreadPoolImpl; +typedef struct IDirectPlay8ServerImpl IDirectPlay8ServerImpl; please add the struct directly to server.c as it is used only there.
+static ULONG WINAPI IDirectPlay8ServerImpl_AddRef(IDirectPlay8Server *iface) +{ + IDirectPlay8ServerImpl *This = impl_from_IDirectPlay8Server(iface); + ULONG refCount = InterlockedIncrement(&This->ref); + + TRACE("(%p)->(ref before=%u)\n", This, refCount - 1); The standard to which Wine moves is to print the current refcount. See http://wiki.winehq.org/COMGuideline under "COM aggregation" for sample AddRef / Release functions.
+HRESULT DPNET_CreateDirectPlay8Server(LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj) IClassFactory* and IUnknown* are much nicer.
+{ + IDirectPlay8ServerImpl *server; + + TRACE("(%p, %s, %p)\n", punkOuter, debugstr_guid(riid), ppobj); + + server = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectPlay8ServerImpl)); + if (!server) + { + *ppobj = NULL; + return E_OUTOFMEMORY; + } + server->IDirectPlay8Server_iface.lpVtbl = &DirectPlay8ServerVtbl; + server->ref = 1; + + *ppobj = (LPVOID*)&server->IDirectPlay8Server_iface; This will fail to fail for an unsupported riid. I have added the correct way to the COMGuideline wiki page.
thanks bye michael
participants (1)
-
Michael Stefaniuc