コード例 #1
0
 private void BuildFields(IVbaTypeRepository repo)
 {
     foreach (var vardesc in ComHelper.GetTypeVariables(_info))
     {
         _fields.Add(new FieldInfo(vardesc, _info.TypeInfo, repo));
     }
 }
コード例 #2
0
        internal MethodInfo(FUNCDESC funcDesc, ITypeInfo info, IVbaTypeRepository repo)
        {
            Contract.Requires <ArgumentNullException>(info != null);
            Contract.Requires <ArgumentNullException>(repo != null);

            BuildMethod(funcDesc, info, repo);
            RewriteHResult();
        }
コード例 #3
0
        private void BuildMethods(IVbaTypeRepository repo)
        {
            var methods = (from funcDesc in ComHelper.GetFuncDescs(_info)
                           select new MethodInfo(funcDesc, _info.TypeInfo, repo)).ToList();

            ConsolidateProperties(methods);

            _methods.AddRange(methods);
        }
コード例 #4
0
 public FieldInfo(VARDESC vardesc, ITypeInfo info, IVbaTypeRepository repo)
 {
     Name       = ComHelper.GetMemberName(info, vardesc);
     Type       = repo.GetVbaType(vardesc.elemdescVar.tdesc, info);
     IsConstant = ComHelper.IsConstant(vardesc);
     if (IsConstant)
     {
         Value = ComHelper.GetConstantValue(vardesc);
     }
     else
     {
         // TODO handle other cases here.  May need reference to parent type.
         IsField = true;
     }
 }
コード例 #5
0
        private void BuildMethod(FUNCDESC funcDesc, ITypeInfo info, IVbaTypeRepository repo)
        {
            // collect parameters.
            var parameterNames = ComHelper.GetParameterNames(info, funcDesc).ToList();
            var elemDescs      = ComHelper.GetElemDescs(funcDesc).ToList();

            for (var index = 0; index < parameterNames.Count; index++)
            {
                var elemDesc = elemDescs[index];
                var param    = new ParameterInfo(parameterNames[index], elemDesc, info, repo);
                _parameters.Add(param);
            }

            Name       = ComHelper.GetMemberName(info, funcDesc);
            ReturnType = repo.GetVbaType(funcDesc.elemdescFunc.tdesc, info);
            Hidden     = ((System.Runtime.InteropServices.ComTypes.FUNCFLAGS)funcDesc.wFuncFlags).HasFlag(System.Runtime.InteropServices.ComTypes.FUNCFLAGS.FUNCFLAG_FHIDDEN);

            if (funcDesc.invkind.HasFlag(System.Runtime.InteropServices.ComTypes.INVOKEKIND.INVOKE_PROPERTYGET))
            {
                IsProperty = true;
                CanRead    = true;
            }
            else if (funcDesc.invkind.HasFlag(System.Runtime.InteropServices.ComTypes.INVOKEKIND.INVOKE_FUNC) &&
                     (VarEnum)funcDesc.elemdescFunc.tdesc.vt != VarEnum.VT_VOID)
            {
                IsFunction = true;
            }
            else if (funcDesc.invkind.HasFlag(System.Runtime.InteropServices.ComTypes.INVOKEKIND.INVOKE_PROPERTYPUT) ||
                     funcDesc.invkind.HasFlag(System.Runtime.InteropServices.ComTypes.INVOKEKIND.INVOKE_PROPERTYPUTREF))
            {
                IsProperty = true;
                CanWrite   = true;
            }
            else if (funcDesc.invkind.HasFlag(System.Runtime.InteropServices.ComTypes.INVOKEKIND.INVOKE_FUNC) &&
                     (VarEnum)funcDesc.elemdescFunc.tdesc.vt == VarEnum.VT_VOID)
            {
                IsSubroutine = true;
            }
            else
            {
                throw new NotImplementedException();
            }
        }
コード例 #6
0
        public ParameterInfo(string paramName, ELEMDESC elemDesc, ITypeInfo info, IVbaTypeRepository repo)
        {
            Contract.Requires <ArgumentNullException>(!string.IsNullOrEmpty(paramName));
            Contract.Requires <ArgumentNullException>(info != null);
            Contract.Requires <ArgumentNullException>(repo != null);

            ParamType = repo.GetVbaType(elemDesc.tdesc, info);
            ParamName = paramName;

            var flags = elemDesc.desc.paramdesc.wParamFlags;

            IsOptional      = flags.HasFlag(PARAMFLAG.PARAMFLAG_FOPT);
            IsOut           = flags.HasFlag(PARAMFLAG.PARAMFLAG_FOUT);
            HasDefaultValue = flags.HasFlag(PARAMFLAG.PARAMFLAG_FHASDEFAULT);

            if (HasDefaultValue)
            {
                DefaultValue = ComHelper.GetDefaultValue(elemDesc.desc.paramdesc);
            }
        }
コード例 #7
0
 internal void BuildMembers(IVbaTypeRepository repo)
 {
     BuildMethods(repo);
     BuildFields(repo);
 }