我理解构建聚合现有COM对象的COM对象意味着在外部对象的IUnkNown.QueryInterface方法中实现重定向逻辑.
我的问题是如果你正在构建的对象被管理,该怎么做.在托管对象上,未明确实现IUnkNown COM Interop为您完成.那么如何告诉COM Interop我构建的对象是另一个COM对象的聚合?
到目前为止,我找到的唯一方法是在外部实现内部对象的所有接口并显式重定向它们.这是a)丑陋和b)假设您知道要实现的所有接口,在我的情况下不是这种情况.
有什么想法吗?
解决方法
如果您使用的是.NET 4,则可以使用
ICustomQueryInterface覆盖默认的IUnkNown.QueryInterface逻辑.
CodePlex上有一个 sample for COM aggregation – 实现非常简单:
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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。