我们开发了 as/w 架构,由 C# 开发的一组对象组成。他们广泛使用事件来通知客户端状态变化等。
最初的目的是允许遗留代码通过 COM 互操作服务使用这些托管对象。这在设计规范中很容易编写,但是,我发现实际实现它更有问题。我已经搜索了好几个小时来寻找使用这种方法处理事件的良好示例。在我们沿着这条道路前进之前,我想确保 COM 互操作是允许遗留代码调用我们的新代码的最佳方式。
似乎有几个不同的选项:1)COM 互操作,2)编写非托管包装类 3)使用 /clr 编译器开关来启用托管对象的调用,4)使用某种反向 pInvoke 调用。我有什么遗漏吗?
每个选项都有其优点和缺点,我想知道最好的方法是什么。以下是针对每个问题的具体问题/评论
COM INTEROP - 事件处理似乎是一个障碍。我们使用具有变量类型的事件作为参数。事件参数可能具有事件 ID 和对象。根据事件 ID,对象将属于某种类型。这可以通过 COM 互操作来处理吗?许多暴露的对象都有属性。您不能在接口中声明属性,因此所有属性都需要相应的 get/set 方法。
WRITE UNMANAGED WRAPPER - 我认为这意味着使用 /clr 选项创建 DLL 以允许创建和调用托管对象并公开非托管对象。将这些不受管理的客户端。我以前没有这样做过。这有什么好处/缺点?
使用 /CLR 开关 - 我理解这意味着添加对托管对象的支持。这种方法的缺点是什么?此选项是否支持上述事件?我们可以说,“这是托管库。将 /clr 编译器选项与您的旧代码一起使用并使用它吗?” 我不知道这件事的后果。是否有一个很好的例子来说明它是如何工作的?(肯定有,只是没找到)
使用反向 PINVOKE - 我不确定这到底是如何工作的,但据我所知,这不是一个可能有效的解决方案。
那么,找到正确方向的决策树是什么样子的呢?任何帮助表示赞赏。
- DP