gameux.dll implementation stub

Vincent Povirk madewokherd at
Tue Jun 8 10:22:30 CDT 2010

+HRESULT IGameExplorer_create(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppObj)
+    TRACE("(%p, %s, %p)\n", pUnkOuter, debugstr_guid(riid), ppObj);
+    if( IsEqualIID( riid, &IID_IGameExplorer ))

This won't work if the caller asks for IUnknown. In general, if you
get a REFIID and void**, you should use QueryInterface so the logic
for getting an interface to your object is in one place.

+static HRESULT WINAPI GameExplorerImpl_VerifyAccess(IGameExplorer *iface,
+        BSTR sGDFBinaryPath, BOOL *pHasAccess)
+    TRACE("(%p, %s, %p)\n", iface, debugstr_w(sGDFBinaryPath), pHasAccess);
+    FIXME("stub\n");
+    *pHasAccess = TRUE;
+    MESSAGE("returning value: %d\n", *pHasAccess);
+    /*return E_NOTIMPL;*/
+    return S_OK;

The MESSAGE() call is a bit odd. That should probably be a TRACE().

You seem to have some FIXME()s in calls that look fully implemented to
me, such as DllMain() and your object constructors.

There's an official description of the debug levels here (although not
everyone strictly follows them):

Your implementation of IGameStatistics appears to be impossible to
create when it's added. You should probably wait and add it when you
implement GetGameStatistics.

Your IGameExplorer and IGameExplorer2 objects should be combined into
one implementation. One should be able to query that object for either
interface. Since IGameExplorer2 is based on IGameExplorer, they can
both use the same vtable (just like IUnknown can use any COM object
vtable). This will be much simpler if you use QueryInterface in your
class constructor.

More information about the wine-devel mailing list