Требования к COM-агрегированию моей пользовательской реализации IRibbonExtensibility?

У нас есть урезанный класс Connect, который создает ядро ​​надстройки из другой сборки. Наш архитектурный дизайн состоит в том, чтобы отделить пользовательский интерфейс и бизнес-логику от загрузочного модуля (= класс Connect), но ограничения общего Addin-а создают нам проблемы.

что мы сделали в Connect.cs:

[GuidAttribute("XYZ"), ProgId("XYZ")]
public class Connect : Object, IDTExtensibility2, ICustomQueryInterface
{
    ...
    CustomQueryInterfaceResult ICustomQueryInterface.GetInterface(ref Guid iid, 
                                                                  out IntPtr ppv)
    {           
        if (iid.Equals(new Guid("000C0396-0000-0000-C000-000000000046")))
        {
            ppv = Marshal.GetComInterfaceForObject(
                          UIObject,  
                          typeof(IRibbonExtensibility),
                          CustomQueryInterfaceMode.Ignore);
            return CustomQueryInterfaceResult.Handled;
        }

        ppv = IntPtr.Zero;
        return CustomQueryInterfaceResult.NotHandled;            
    }
 }

как выглядит RibbonUI:

public interface IOfficeFluentUI :  IRibbonExtensibility
{
    ...
}

public class OfficeFluentUI : OfficeUIBase, IOfficeFluentUI
{
    ...
    public string GetCustomUI(string RibbonID)
    { 
       ...
    }    
}

Функция GetInterface работает, она получает интерфейс com, но, к сожалению, функция GetCustomUI НИКОГДА не вызывается. Что мы не правы? Большое спасибо за любую помощь.

[править] Мы уже знаем статьи " Управляемое объединение COM " и " ICustomQueryInterface ". К сожалению, они не очень помогли.

0 ответов

Другие вопросы по тегам