+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): http://www.winehq.org/docs/winedev-guide/debugging#DBG-CLASSES
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.