加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

.net – 托管COM聚合

发布时间:2020-12-14 04:57:16 所属栏目:百科 来源:网络整理
导读:我理解构建聚合现有COM对象的COM对象意味着在外部对象的IUnknown.QueryInterface方法中实现重定向逻辑. 我的问题是如果你正在构建的对象被管理,该怎么做.在托管对象上,未明确实现IUnknown COM Interop为您完成.那么如何告诉COM Interop我构建的对象是另一个C
我理解构建聚合现有COM对象的COM对象意味着在外部对象的IUnknown.QueryInterface方法中实现重定向逻辑.

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

到目前为止,我找到的唯一方法是在外部实现内部对象的所有接口并显式重定向它们.这是a)丑陋和b)假设您知道要实现的所有接口,在我的情况下不是这种情况.

有什么想法吗?

解决方法

如果您使用的是.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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读