【问题标题】:Managed COM aggregation托管 COM 聚合
【发布时间】:2010-12-31 03:52:54
【问题描述】:

我的理解是构建一个聚合现有 COM 对象的 COM 对象意味着在外部对象的 IUnknown.QueryInterface 方法中实现重定向逻辑。

我的问题是,如果您正在构建的对象是受管理的,如何做到这一点。在托管对象上,IUnknown 未明确实现 COM Interop 为您完成。那么如何告诉 COM Interop 我构建的对象是另一个 COM 对象的聚合?

到目前为止,我发现的唯一方法是在外部实现内部对象的所有接口并显式重定向它们。这是 a) 丑陋的 b) 假设您知道要实现的所有接口,而我的情况并非如此。

有什么想法吗?

【问题讨论】:

    标签: .net .net-3.5 com aggregation


    【解决方案1】:

    如果您使用的是 .NET 4,那么您可以使用 ICustomQueryInterface 覆盖默认的 IUnknown.QueryInterface 逻辑。 CodePlex 上有一个sample for COM aggregation - 实现非常简单:

    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;
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2012-09-23
    • 1970-01-01
    • 2018-03-17
    • 2012-01-26
    • 2011-04-08
    相关资源
    最近更新 更多