コード例 #1
0
        private unsafe void PopulateEvents(RuntimeType.RuntimeTypeCache.Filter filter, RuntimeTypeHandle declaringTypeHandle, Hashtable csEventInfos, List <RuntimeEventInfo> list)
        {
            int token = declaringTypeHandle.GetToken();

            if (!MetadataToken.IsNullToken(token))
            {
                MetadataImport metadataImport = declaringTypeHandle.GetModuleHandle().GetMetadataImport();
                int            count          = metadataImport.EnumEventsCount(token);
                int *          result         = stackalloc int[count]; //result.AllocatedUntil = count
                metadataImport.EnumEvents(token, result, count);
                this.PopulateEvents(filter, declaringTypeHandle, metadataImport, result, count, csEventInfos, list);
                //Ensures that result.AllocatedUntil >= count!
            }
        }
コード例 #2
0
 private unsafe void PopulateEvents(RuntimeType.RuntimeTypeCache.Filter filter, RuntimeTypeHandle declaringTypeHandle, MetadataImport scope, int *tkAssociates, int cAssociates, Hashtable csEventInfos, List <RuntimeEventInfo> list)
 {
     //Require tkAssociates.AllocatedUntil >= cAssociates
     for (int i = 0; i < cAssociates; i++)
     {
         int        mdToken = tkAssociates[i];
         Utf8String name    = scope.GetName(mdToken);
         if (filter.Match(name))
         {
             bool             flag;
             RuntimeEventInfo item = new RuntimeEventInfo(mdToken, declaringTypeHandle.GetRuntimeType(), this.m_runtimeTypeCache, out flag);
             if ((declaringTypeHandle.Equals(this.m_runtimeTypeCache.RuntimeTypeHandle) || !flag) && (csEventInfos[item.Name] == null))
             {
                 csEventInfos[item.Name] = item;
                 list.Add(item);
             }
         }
     }
 }