Esempio n. 1
0
        private ComPropertyInfo[] GetInheriteProperties(ComTypeInfo comTypeInfo)
        {
            List <ComPropertyInfo> list = new List <ComPropertyInfo>();

            for (int i = 0; i < comTypeInfo.ImplementedTypes.Length; i++)
            {
                ComImplementedTypeInfo comImplementedTypeInfo = comTypeInfo.ImplementedTypes[i];

                if (comImplementedTypeInfo.IsSource == false)
                {
                    foreach (ComPropertyInfo comPropertyInfo in comImplementedTypeInfo.ComTypeInfo.Properties)
                    {
                        if (list.FirstOrDefault(x => x.Name.Equals(comPropertyInfo.Name)) == null)
                        {
                            list.Add(comPropertyInfo);
                        }
                    }

                    list.AddRange(GetInheriteProperties(comImplementedTypeInfo.ComTypeInfo));
                }
            }

            list.Sort(delegate(ComPropertyInfo a, ComPropertyInfo b)
            {
                return(a.Name.CompareTo(b.Name));
            });

            return(list.ToArray());
        }
Esempio n. 2
0
        public ComTypeInfo TryGetComTypeInfo()
        {
            ComTypeInfo comTypeInfo = null;
            IDispatch   dispatch    = null;

            try
            {
                dispatch = TryGetUniqueRCW <IDispatch>();

                if (dispatch != null)
                {
                    comTypeInfo = ComTypeManager.Instance.FromIDispatch(dispatch);
                }
            }
            catch
            {
            }
            finally
            {
                ComPtr.CleanupUniqueRCW(dispatch);
            }


            return(comTypeInfo);
        }
Esempio n. 3
0
        public ComPropertyInfo(ComTypeInfo parent, ComFunctionInfo[] functions)
            : base(parent)
        {
            _functions.AddRange(functions);

            _name        = functions[0].Name;
            _description = functions[0].Description;
        }
Esempio n. 4
0
        public bool TryIsCollection()
        {
            ComTypeInfo comTypeInfo = TryGetComTypeInfo();

            if (comTypeInfo != null)
            {
                return(comTypeInfo.IsCollection);
            }

            return(false);
        }
Esempio n. 5
0
        public ComFunctionInfo(ComTypeInfo parent, IntPtr pFuncDesc)
            : base(parent)
        {
            _pFuncDesc = pFuncDesc;
            _funcDesc = pFuncDesc.ToStructure < System.Runtime.InteropServices.ComTypes.FUNCDESC>();
            _comTypeInfo.GetITypeInfo().GetDocumentation(_funcDesc.memid, out _name, out _description, out _helpContext, out _helpFile);

            if (_description == null) _description = String.Empty;
            if (_helpFile == null) _helpFile = String.Empty;

            LoadParameters();
        }
Esempio n. 6
0
 public ComVariableInfo(ComTypeInfo parent, System.Runtime.InteropServices.ComTypes.VARDESC varDesc, object constantValue)
     : base(parent)
 {
     _varDesc = varDesc;
     _comTypeInfo.GetITypeInfo().GetDocumentation(_varDesc.memid, out _name, out _description, out _helpContext, out _helpFile);
     _constantValue = constantValue;
     if (_description == null)
     {
         _description = String.Empty;
     }
     if (_helpFile == null)
     {
         _helpFile = String.Empty;
     }
 }
Esempio n. 7
0
        public ComFunctionInfo(ComTypeInfo parent, IntPtr pFuncDesc)
            : base(parent)
        {
            _pFuncDesc = pFuncDesc;
            _funcDesc  = pFuncDesc.ToStructure <System.Runtime.InteropServices.ComTypes.FUNCDESC>();
            _comTypeInfo.GetITypeInfo().GetDocumentation(_funcDesc.memid, out _name, out _description, out _helpContext, out _helpFile);

            if (_description == null)
            {
                _description = String.Empty;
            }
            if (_helpFile == null)
            {
                _helpFile = String.Empty;
            }

            LoadParameters();
        }
Esempio n. 8
0
        public bool HasComType(string fullName)
        {
            string[] tokens = fullName.Split(new char[] { '.' });

            if (tokens.Length == 2)
            {
                ComTypeLibrary comTypeLibrary = _typeLibraries.Where(x => x.Name.Equals(tokens[0])).FirstOrDefault();
                if (comTypeLibrary != null)
                {
                    ComTypeInfo comTypeInfo = comTypeLibrary.ComTypeInfos.Where(x => x.Name.Equals(tokens[1])).FirstOrDefault();
                    if (comTypeInfo != null)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Esempio n. 9
0
        public static string TypeDescToString(System.Runtime.InteropServices.ComTypes.TYPEDESC typeDesc, ITypeInfo typeInfo)
        {
            ITypeInfo refTypeInfo = null;
            VarEnum   variantType = (VarEnum)typeDesc.vt;

            System.Runtime.InteropServices.ComTypes.TYPEDESC ptrTypeDesc;

            switch (variantType)
            {
            case VarEnum.VT_PTR:
                ptrTypeDesc = typeDesc.lpValue.ToStructure <System.Runtime.InteropServices.ComTypes.TYPEDESC>();
                return(TypeDescToString(ptrTypeDesc, typeInfo));

            case VarEnum.VT_USERDEFINED:
                //int href = (int)(typeDesc.lpValue.ToInt64() & int.MaxValue);
                //typeInfo.GetRefTypeInfo(href, out refTypeInfo);
                IFixedTypeInfo fixedTypeInfo = (IFixedTypeInfo)typeInfo;
                fixedTypeInfo.GetRefTypeInfo(typeDesc.lpValue, out refTypeInfo);
                ComTypeInfo refComTypeInfo = ComTypeManager.Instance.FromITypeInfo(refTypeInfo);
                return(refComTypeInfo.FullName);

            case VarEnum.VT_SAFEARRAY:
                string s = TypeDescToString(typeDesc.lpValue.ToStructure <System.Runtime.InteropServices.ComTypes.TYPEDESC>(), typeInfo);
                return(String.Format("{0}[]", s));

            case VarEnum.VT_VOID:
                return("void");

            default:
                Type t = VariantTypeToType(variantType);
                if (t != null)
                {
                    return(t.Name);
                }
                break;
            }

            return("");
        }
Esempio n. 10
0
        public object TryGetFirstAvailableProperty(string[] propertyNames)
        {
            object      value   = null;
            ComTypeInfo comType = TryGetComTypeInfo();

            if (comType != null)
            {
                foreach (string propertyName in propertyNames)
                {
                    ComPropertyInfo comPropertyInfo = comType.Properties.Where(x => x.Name.Equals(propertyName)).FirstOrDefault();

                    if ((comPropertyInfo != null) && (comPropertyInfo.GetFunction != null))
                    {
                        if (MarshalEx.Succeeded(TryInvokePropertyGet(comPropertyInfo.GetFunction.DispId, out value)))
                        {
                            break;
                        }
                    }
                }
            }

            return(value);
        }
Esempio n. 11
0
        public void LookupAndSelect(string name)
        {
            if (String.IsNullOrWhiteSpace(name))
            {
                return;
            }

            string[] tokens = name.Split(new char[] { '.' });

            ComTypeLibrary comTypeLibrary = null;
            ComTypeInfo    comTypeInfo    = null;

            if (tokens.Length == 1)
            {
                comTypeLibrary = _typeLibraries.Where(x => x.Name.Equals(tokens[0])).FirstOrDefault();
                if (comTypeLibrary != null)
                {
                    if (ComTypeLibrarySelected != null)
                    {
                        ComTypeLibrarySelected(this, comTypeLibrary);
                    }
                }
            }
            else if (tokens.Length == 2)
            {
                comTypeLibrary = _typeLibraries.Where(x => x.Name.Equals(tokens[0])).FirstOrDefault();
                if (comTypeLibrary != null)
                {
                    comTypeInfo = comTypeLibrary.ComTypeInfos.Where(x => x.Name.Equals(tokens[1])).FirstOrDefault();
                    if ((comTypeInfo != null) && (ComTypeInfoSelected != null))
                    {
                        ComTypeInfoSelected(this, comTypeInfo);
                    }
                }
            }
        }
Esempio n. 12
0
        public ComTypeInfo LookupUserDefined(System.Runtime.InteropServices.ComTypes.TYPEDESC typeDesc, ComTypeInfo comTypeInfo)
        {
            if (comTypeInfo == null) return null;

            ITypeInfo refTypeInfo = null;
            VarEnum variantType = (VarEnum)typeDesc.vt;

            if (variantType == VarEnum.VT_USERDEFINED)
            {
                IFixedTypeInfo fixedTypeInfo = (IFixedTypeInfo)comTypeInfo.GetITypeInfo();
                fixedTypeInfo.GetRefTypeInfo(typeDesc.lpValue, out refTypeInfo);
                return ComTypeManager.Instance.FromITypeInfo(refTypeInfo);
            }

            return null;
        }
Esempio n. 13
0
        public ComPropertyInfo(ComTypeInfo parent, ComFunctionInfo[] functions)
            : base(parent)
        {
            _functions.AddRange(functions);

            _name = functions[0].Name;
            _description = functions[0].Description;
        }
        public void DescribeComTypeInfo(ComTypeInfo comTypeInfo)
        {
            Clear();

            if (comTypeInfo is ComAliasInfo)
            {
                AppendText("Alias ");
            }
            else if (comTypeInfo is ComCoClassInfo)
            {
                AppendText("CoClass ");
            }
            else if (comTypeInfo is ComEnumInfo)
            {
                AppendText("Enum ");
            }
            else if (comTypeInfo is ComDispatchInfo)
            {
                AppendText("Dispatch interface ");
            }
            else if (comTypeInfo is ComInterfaceInfo)
            {
                AppendText("Interface ");
            }
            //else if (comTypeInfo is ComMaxInfo)
            //{
            //}
            else if (comTypeInfo is ComModuleInfo)
            {
                AppendText("Module ");
            }
            else if (comTypeInfo is ComRecordInfo)
            {
                AppendText("Struct ");
            }
            else if (comTypeInfo is ComUnionInfo)
            {
                AppendText("Union ");
            }

            //Interface Application
            //    Member of SolidEdgeFramework
            //    Provides the properties and methods necessary for a Visual Basic user to drive Solid Edge programmatically.

            AppendText(comTypeInfo.Name, ForeColor, FontStyle.Bold);
            AppendText(Environment.NewLine);
            AppendText("    Member of ");
            InsertLink(comTypeInfo.ComTypeLibrary.Name);
            AppendText(Environment.NewLine);

            WriteSummary(comTypeInfo.Description);
            WriteGuid(comTypeInfo.Guid);
        }
Esempio n. 15
0
 public ComMemberInfo(ComTypeInfo comTypeInfo)
 {
     _comTypeInfo = comTypeInfo;
 }
Esempio n. 16
0
        public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
        {
            if (_propertyDescriptorCollection == null)
            {
                _propertyDescriptorCollection = new PropertyDescriptorCollection(new PropertyDescriptor[] { }, true);

                ComTypeInfo comTypeInfo = TryGetComTypeInfo();

                if (comTypeInfo != null)
                {
                    List <ComPtrPropertyDescriptor> list = new List <ComPtrPropertyDescriptor>();

                    foreach (ComPropertyInfo comPropertyInfo in comTypeInfo.GetProperties(true))
                    {
                        ComFunctionInfo getComFunctionInfo = comPropertyInfo.GetFunction;
                        bool            bReadOnly          = comPropertyInfo.SetFunction == null ? true : false;

                        if (getComFunctionInfo != null)
                        {
                            VarEnum variantType = getComFunctionInfo.ReturnParameter.VariantType;

                            switch (variantType)
                            {
                            case VarEnum.VT_PTR:
                            case VarEnum.VT_DISPATCH:
                            case VarEnum.VT_UNKNOWN:
                                continue;

                            case VarEnum.VT_SAFEARRAY:
                                continue;
                            }

                            // Special case. MailSession is a PITA property that causes modal dialog.
                            if (comPropertyInfo.Name.Equals("MailSession"))
                            {
                                ComPtrProperty comPtrProperty = new ComPtrProperty(comPropertyInfo.Name, comPropertyInfo.Description, 0, typeof(int), variantType, true);
                                list.Add(new ComPtrPropertyDescriptor(ref comPtrProperty, comPropertyInfo, attributes));
                                continue;
                            }

                            object value = null;
                            if (MarshalEx.Succeeded(TryInvokePropertyGet(getComFunctionInfo.DispId, out value)))
                            {
                                Type propertyType = typeof(object);

                                if (value != null)
                                {
                                    propertyType = value.GetType();
                                }
                                else
                                {
                                    bReadOnly = true;
                                }

                                ComPtrProperty comPtrProperty = new ComPtrProperty(comPropertyInfo.Name, comPropertyInfo.Description, value, propertyType, variantType, bReadOnly);
                                list.Add(new ComPtrPropertyDescriptor(ref comPtrProperty, comPropertyInfo, attributes));
                            }
                        }
                    }

#if DEBUG
                    ComPtrProperty refCountProperty = new ComPtrProperty("[RefCount]", "", this.RefCount, typeof(int), VarEnum.VT_I4, true);
                    list.Add(new ComPtrPropertyDescriptor(ref refCountProperty, null, attributes));
#endif
                    _propertyDescriptorCollection = new PropertyDescriptorCollection(list.ToArray());
                }
            }

            return(_propertyDescriptorCollection);
        }
Esempio n. 17
0
 void Instance_ComTypeInfoSelected(object sender, ComTypeInfo comTypeInfo)
 {
     tabControl.SelectedIndex = TabPageTypeBrowserIndex;
 }
Esempio n. 18
0
 public ComMemberInfo(ComTypeInfo comTypeInfo)
 {
     _comTypeInfo = comTypeInfo;
 }
Esempio n. 19
0
        private ComPropertyInfo[] GetInheriteProperties(ComTypeInfo comTypeInfo)
        {
            List<ComPropertyInfo> list = new List<ComPropertyInfo>();

            for (int i = 0; i < comTypeInfo.ImplementedTypes.Length; i++)
            {
                ComImplementedTypeInfo comImplementedTypeInfo = comTypeInfo.ImplementedTypes[i];

                if (comImplementedTypeInfo.IsSource == false)
                {
                    foreach (ComPropertyInfo comPropertyInfo in comImplementedTypeInfo.ComTypeInfo.Properties)
                    {
                        if (list.FirstOrDefault(x => x.Name.Equals(comPropertyInfo.Name)) == null)
                        {
                            list.Add(comPropertyInfo);
                        }
                    }

                    list.AddRange(GetInheriteProperties(comImplementedTypeInfo.ComTypeInfo));
                }
            }

            list.Sort(delegate(ComPropertyInfo a, ComPropertyInfo b)
            {
                return a.Name.CompareTo(b.Name);
            });

            return list.ToArray();
        }
Esempio n. 20
0
        public ComTypeInfo LookupUserDefined(System.Runtime.InteropServices.ComTypes.TYPEDESC typeDesc, ComTypeInfo comTypeInfo)
        {
            if (comTypeInfo == null)
            {
                return(null);
            }

            ITypeInfo refTypeInfo = null;
            VarEnum   variantType = (VarEnum)typeDesc.vt;

            if (variantType == VarEnum.VT_USERDEFINED)
            {
                IFixedTypeInfo fixedTypeInfo = (IFixedTypeInfo)comTypeInfo.GetITypeInfo();
                fixedTypeInfo.GetRefTypeInfo(typeDesc.lpValue, out refTypeInfo);
                return(ComTypeManager.Instance.FromITypeInfo(refTypeInfo));
            }

            return(null);
        }
 public ComImplementedTypeInfo(ComTypeInfo comTypeInfo, System.Runtime.InteropServices.ComTypes.IMPLTYPEFLAGS implTypeFlags)
 {
     _comTypeInfo = comTypeInfo;
     _implTypeFlags = implTypeFlags;
 }
Esempio n. 22
0
 public ComVariableInfo(ComTypeInfo parent, System.Runtime.InteropServices.ComTypes.VARDESC varDesc, object constantValue)
     : base(parent)
 {
     _varDesc = varDesc;
     _comTypeInfo.GetITypeInfo().GetDocumentation(_varDesc.memid, out _name, out _description, out _helpContext, out _helpFile);
     _constantValue = constantValue;
     if (_description == null) _description = String.Empty;
     if (_helpFile == null) _helpFile = String.Empty;
 }
Esempio n. 23
0
 public ComTypeInfoTreeNode(ComTypeInfo comTypeInfo)
     : base()
 {
     _comTypeInfo = comTypeInfo;
     Text = _comTypeInfo.Name;
     FullText = _comTypeInfo.FullName;
 }
Esempio n. 24
0
 public ComImplementedTypeInfo(ComTypeInfo comTypeInfo, System.Runtime.InteropServices.ComTypes.IMPLTYPEFLAGS implTypeFlags)
 {
     _comTypeInfo   = comTypeInfo;
     _implTypeFlags = implTypeFlags;
 }