private bool InitFromFileInfo(IntPtr pInfo)
        {
            List <COMProxyInstanceEntry>   entries       = new List <COMProxyInstanceEntry>();
            List <NdrComplexTypeReference> complex_types = new List <NdrComplexTypeReference>();
            NdrParser parser = new NdrParser();

            foreach (var file_info in COMUtilities.EnumeratePointerList <ProxyFileInfo>(pInfo))
            {
                string[] names = file_info.GetNames();
                CInterfaceStubHeader[] stubs = file_info.GetStubs();
                Guid[] base_iids             = file_info.GetBaseIids();
                for (int i = 0; i < names.Length; ++i)
                {
                    entries.Add(new COMProxyInstanceEntry(this, names[i], stubs[i].GetIid(),
                                                          base_iids[i], stubs[i].DispatchTableCount, ReadProcs(parser, base_iids[i], stubs[i])));
                }
            }

            complex_types.AddRange(parser.Types.OfType <NdrBaseStructureTypeReference>());
            complex_types.AddRange(parser.Types.OfType <NdrUnionTypeReference>());
            Entries      = entries.AsReadOnly();
            ComplexTypes = complex_types.AsReadOnly();
            return(true);
        }