2

我们有一个精简的 Connect 类,它从另一个程序集中实例化插件的核心。我们的架构设计是让 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 函数永远不会被调用。我们做错了什么?非常感谢您的帮助。

[编辑] 我们已经知道“托管 COM 聚合”和“ ICustomQueryInterface ”文章。不幸的是,他们并没有真正提供帮助。

4

0 回答 0