Beispiel #1
0
        private void UnregisterTypeLibrary(RegistryKey rootKey)
        {
            try
            {
                ITypeLib typeLib;
                Guid     libId;

                HRESULT hr = ComAPI.LoadTypeLib(TypeLibPath, out typeLib);
                if (hr != ComAPI.S_OK)
                {
                    return;
                }

                IntPtr libAttrPtr;
                typeLib.GetLibAttr(out libAttrPtr);
                TYPELIBATTR typeLibAttr = (TYPELIBATTR)Marshal.PtrToStructure(libAttrPtr, typeof(TYPELIBATTR));
                libId = typeLibAttr.guid;

                rootKey.DeleteSubKeyTree(@"TypeLib\" + libId.ToString("B").ToUpperInvariant());

                typeLib.ReleaseTLibAttr(libAttrPtr);
            }
            catch (Exception e)
            {
                Debug.Print("TypeLibHelper.UnregisterServer error : " + e);
            }
        }
Beispiel #2
0
        private Guid?RegisterTypeLibrary(string rootKeyName)
        {
            ITypeLib typeLib;
            Guid     libId;
            HRESULT  hr = ComAPI.LoadTypeLib(TypeLibPath, out typeLib);

            if (hr != ComAPI.S_OK)
            {
                return(null);
            }

            string helpDir = System.IO.Path.GetDirectoryName(TypeLibPath);

            if (helpDir != null && !System.IO.Directory.Exists(helpDir))
            {
                helpDir = System.IO.Path.GetDirectoryName(DnaLibrary.XllPath);
            }

            // Deal with TYPELIBATTR
            IntPtr libAttrPtr;

            typeLib.GetLibAttr(out libAttrPtr);
            TYPELIBATTR typeLibAttr = (TYPELIBATTR)Marshal.PtrToStructure(libAttrPtr, typeof(TYPELIBATTR));

            libId = typeLibAttr.guid;
            string libIdString = libId.ToString("B").ToUpperInvariant();
            string version     = typeLibAttr.wMajorVerNum.ToString(CultureInfo.InvariantCulture) + "." + typeLibAttr.wMinorVerNum.ToString(CultureInfo.InvariantCulture);

            // Get Friendly Name
            string friendlyName;
            string docString;
            int    helpContext;
            string helpFile;

            typeLib.GetDocumentation(-1, out friendlyName, out docString, out helpContext, out helpFile);
            // string helpDir = System.IO.Path.GetDirectoryName(helpFile); // (or from TypeLibPath?)

            Registry.SetValue(rootKeyName + @"\TypeLib\" + libIdString + @"\" + version, null, friendlyName, RegistryValueKind.String);
            Registry.SetValue(rootKeyName + @"\TypeLib\" + libIdString + @"\" + version + @"\" + "FLAGS", null, typeLibAttr.wLibFlags, RegistryValueKind.DWord);
            if (helpDir != null)
            {
                Registry.SetValue(rootKeyName + @"\TypeLib\" + libIdString + @"\" + version + @"\" + "HELPDIR", null, helpDir, RegistryValueKind.String);
            }
            if (IntPtr.Size == 8)
            {
                Registry.SetValue(rootKeyName + @"\TypeLib\" + libIdString + @"\" + version + @"\" + typeLibAttr.lcid.ToString(CultureInfo.InvariantCulture) + @"\win64", null, TypeLibPath, RegistryValueKind.String);
            }
            else
            {
                Registry.SetValue(rootKeyName + @"\TypeLib\" + libIdString + @"\" + version + @"\" + typeLibAttr.lcid.ToString(CultureInfo.InvariantCulture) + @"\win32", null, TypeLibPath, RegistryValueKind.String);
            }

            typeLib.ReleaseTLibAttr(libAttrPtr);
            return(libId);
        }
Beispiel #3
0
 internal static void RegisterClassFactory(CLSID clsId, ComAPI.IClassFactory classFactory)
 {
     // CONSIDER: Do we need to deal with the case where it is already in the list?
     //           For now we expect it to throw...
     registeredClassFactories.Add(clsId, classFactory);
 }
Beispiel #4
0
 static bool TryGetComClassType(CLSID clsId, out ComAPI.IClassFactory factory)
 {
     // Check among the persistently registered classes
     foreach (ExcelComClassType comClass in registeredComClassTypes)
     {
         if (comClass.ClsId == clsId)
         {
             factory = new ClassFactory(comClass);
             return true;
         }
     }
     factory = null;
     return false;
 }