Требования к 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 ". К сожалению, они не очень помогли.