Microsoft.VisualStudio.Project.ProjectContainerNode.GetNestedHierarchy C# (CSharp) Method

GetNestedHierarchy() private method

private GetNestedHierarchy ( UInt32 itemId, System.Guid &iidHierarchyNested, IntPtr &ppHierarchyNested, uint &pItemId ) : int
itemId System.UInt32
iidHierarchyNested System.Guid
ppHierarchyNested System.IntPtr
pItemId uint
return int
        public override int GetNestedHierarchy(UInt32 itemId, ref Guid iidHierarchyNested, out IntPtr ppHierarchyNested, out uint pItemId)
        {
            pItemId = VSConstants.VSITEMID_ROOT;
            ppHierarchyNested = IntPtr.Zero;
            if(this.FirstChild != null)
            {
                for(HierarchyNode n = this.FirstChild; n != null; n = n.NextSibling)
                {
                    NestedProjectNode p = n as NestedProjectNode;

                    if(p != null && p.Id == itemId)
                    {
                        if(p.NestedHierarchy != null)
                        {
                            IntPtr iunknownPtr = IntPtr.Zero;
                            int returnValue = VSConstants.S_OK;
                            try
                            {
                                iunknownPtr = Marshal.GetIUnknownForObject(p.NestedHierarchy);
                                Marshal.QueryInterface(iunknownPtr, ref iidHierarchyNested, out ppHierarchyNested);
                            }
                            catch(COMException e)
                            {
                                returnValue = e.ErrorCode;
                            }
                            finally
                            {
                                if(iunknownPtr != IntPtr.Zero)
                                {
                                    Marshal.Release(iunknownPtr);
                                }
                            }

                            return returnValue;
                        }
                        break;
                    }
                }
            }

            return VSConstants.E_FAIL;
        }