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