如果您使用的是.NET 4,则可以使用ICustomQueryInterface覆盖默认IUnknown.QueryInterface逻辑.在CodePlex上有一个COM聚合的示例 - 实现非常简单:
CustomQueryInterfaceResult ICustomQueryInterface.GetInterface(ref Guid iid, out IntPtr ppv)
{
if(iid.Equals(new Guid("00000000-0000-0000-0000-000000001234")))
{
ppv = Marshal.GetComInterfaceForObject(this.innerObject, typeof(IInnerInterface), CustomQueryInterfaceMode.Ignore);
return CustomQueryInterfaceResult.Handled;
}
ppv = IntPtr.Zero;
return CustomQueryInterfaceResult.NotHandled;
}
Run Code Online (Sandbox Code Playgroud)