public static string TypeKind2String(TypeLibTypes.Interop.TYPEKIND typeKind)
 {
     string typeKindString = null;
     switch (typeKind)
     {
         case TypeLibTypes.Interop.TYPEKIND.TKIND_ALIAS:
             typeKindString = "Alias";
             break;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_COCLASS:
             typeKindString = "CoClass";
             break;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_DISPATCH:
             typeKindString = "DispatchInterface";
             break;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_ENUM:
             typeKindString = "Enum";
             break;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_INTERFACE:
             typeKindString = "Interface";
             break;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_MODULE:
             typeKindString = "Module";
             break;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_RECORD:
             typeKindString = "Struct";
             break;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_UNION:
             typeKindString = "Union";
             break;
     }
     return typeKindString;
 }
Exemple #2
0
 private static extern int LoadTypeLibWithResolver([MarshalAs(UnmanagedType.LPWStr)] string file, REGKIND kind, ITypeLibResolver resolver, out TypeLibTypes.Interop.ITypeLib typeLib);
Exemple #3
0
            public int ResolveTypeLib(string simpleName, Guid tlbId, int lcid, ushort majorVersion, ushort minorVersion, TypeLibTypes.Interop.SYSKIND syskind, out string bstrPathName)
            {
                // Remember the type lib info
                s_MissingTypeLibInfo = new TypeLibInfo();
                s_MissingTypeLibInfo.name = simpleName;
                s_MissingTypeLibInfo.guid = tlbId;
                s_MissingTypeLibInfo.majorVersion = majorVersion;
                s_MissingTypeLibInfo.minorVersion = minorVersion;

                //
                // Find this type library in list of referenced type libraries
                //
                foreach (string pathName in s_RefTypeLibraries.Keys)
                {
                TypeLib refTypeLib = new TypeLib(s_RefTypeLibraries[pathName] as TypeLibTypes.Interop.ITypeLib);
                TypeLibAttr libAttr = refTypeLib.GetLibAttr();
                if (libAttr.guid == tlbId)
                {
                    if (libAttr.wMajorVerNum == majorVersion && libAttr.wMinorVerNum == minorVersion)
                    {
                        // Resolved to a matching type lib
                        bstrPathName = pathName;
                        return 0;
                    }
                }
                }

                //
                // Find using GUID
                //
                int hr = TypeLib.QueryPathOfRegTypeLib(ref tlbId, majorVersion, minorVersion, lcid, out bstrPathName);
                if (hr >= 0)
                {
                // Try loading the type library and verify guid/version
                hr = TryLoadTypeLib(bstrPathName, simpleName, tlbId, majorVersion, minorVersion);
                if (hr >= 0) return hr;
                }

                //
                // Try to load current directory
                //
                bstrPathName = Path.Combine(Directory.GetCurrentDirectory(), simpleName);
                if (File.Exists(bstrPathName))
                {
                // Try loading the type library guid/version
                hr = TryLoadTypeLib(bstrPathName, simpleName, tlbId, majorVersion, minorVersion);
                if (hr >= 0) return hr;
                }

                if (TlbImpCode.s_Options.m_bVerboseMode)
                {
                Output.WriteInfo(
                    Resource.FormatString("Msg_TypeLibRefResolveFailed",
                        new object[] { simpleName, majorVersion.ToString() + "." + minorVersion, tlbId.ToString() }),
                    MessageCode.Msg_TypeLibRefResolveFailed);
                }

                return -1;
            }
Exemple #4
0
 /// <summary>
 /// Converts COM type library type to internal type mapping 
 /// </summary>
 public static ConvType TypeKindToConvType(TypeLibTypes.Interop.TYPEKIND typekind)
 {
     switch (typekind)
     {
         case TypeLibTypes.Interop.TYPEKIND.TKIND_DISPATCH:
             return ConvType.Interface;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_ENUM:
             return ConvType.Enum;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_INTERFACE:
             return ConvType.Interface;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_RECORD:
             return ConvType.Struct;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_UNION:
             return ConvType.Union;
         case TypeLibTypes.Interop.TYPEKIND.TKIND_COCLASS:
             return ConvType.CoClass;
         default:
             Debug.Assert(false, "Should not get here!");
             return ConvType.Interface;
     }
 }