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); }