我们有一个精简的 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 ”文章。不幸的是,他们并没有真正提供帮助。