On 5/18/2012 14:06, Detlef Riekenberg wrote:
} else if (IsEqualIID(riid,&IID_IQueryInfo)&& (cidl == 1)) {
pidl = ILCombine (This->pidlRoot, apidl[0]);
pObj = (IUnknown *) IQueryInfo_Constructor (pidl);
SHFree (pidl);
hr = S_OK; } else {
Patch doesn't have a cast here, and looks really redundant. If you really need that it's better to make IQueryInfo_Constructor look more like class factory call - with HRESULT and void** parameter.
Also it looks like you always need to combine pidls and cleanup after that, I think it's better to combine them in constructor and keep result in QueryInfo impl. (instead of making a clone). So constructor could look like "HRESULT constructor(root, pidl, pObj)".