private void BuildFields(IVbaTypeRepository repo) { foreach (var vardesc in ComHelper.GetTypeVariables(_info)) { _fields.Add(new FieldInfo(vardesc, _info.TypeInfo, repo)); } }
internal MethodInfo(FUNCDESC funcDesc, ITypeInfo info, IVbaTypeRepository repo) { Contract.Requires <ArgumentNullException>(info != null); Contract.Requires <ArgumentNullException>(repo != null); BuildMethod(funcDesc, info, repo); RewriteHResult(); }
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); }
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; } }
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(); } }
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); } }
internal void BuildMembers(IVbaTypeRepository repo) { BuildMethods(repo); BuildFields(repo); }