COM的要求聚合我的自定义IRibbonExtensibility实现?

时间:2013-04-10 09:25:33

标签: c# com aggregation shared-addin

我们有一个精简的Connect类,它从另一个程序集中实例化addin的核心。我们的架构设计是将UI和业务逻辑与加载模块(= 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函数从未被调用过。 我们错了什么?非常感谢您的帮助。

[编辑] 我们已经知道“Managed COM Aggregation”和“ICustomQueryInterface”文章。不幸的是,他们并没有真正帮助。

0 个答案:

没有答案