C ++ Wrapper Native Interop Enterprise Scale

时间:2009-11-18 07:02:40

标签: design-patterns c++-cli interop

我想知道用C ++编写包含大量库的最佳方法是什么,以便在C#中访问它。

之前我曾与interop合作过,我喜欢IJW。但我不确定如何使用庞大的库实现这种方法。我想知道是否有任何模式可供使用,否则我只需要编写一个包含在c ++库中存在的每个类的包装器,这个类是不可管理的。

另外,我不能只为图书馆提供一个单一的立面,因为它非常大,而且在这一点上势不可挡,所以任何想法都会受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

如果表现最受关注,请留下IJW。如果你必须在代码中编写包装类或者更喜欢可读性,我建议你创建COM包装器,因为IDE向导可以帮助你生成代码,本地客户端也可以使用COM。这就是微软为Office和IE公开其API的方式。

答案 1 :(得分:0)

我经历了一个类似于你所描述的过程。在我们的情况下,没有简单的方法来包装类(IJW对于大型C ++库来说不是一个可行的解决方案),所以我们 包装每个类。

我们首先编写了一个包装器,首先是我们需要在应用程序中使用的核心类,并根据需要为其他类添加包装器。这些事情特别有助于我们:

  • 在我们的包装层中,我们使用了大量的宏来翻译c ++代码和.NET概念之间的转换。例如,宏用于将“属性”类型方法转换为真正的.NET属性。
  • 我们总是使用“property IntPtr NativeObject {get();}”将本机C ++类公开为IntPtr。这允许我们将包装器拆分为多个组件,同时仍允许包装器对象将本机对象相互传递。
  • 彻底的nunit测试套件,以验证一切按预期工作。

涉及到很多工作,但是为每个类编写一个包装器是可管理的,但(显然)只有在获得足够的好处时才值得。 “手工”编写包装也使我们对互操作进行了细粒度的控制,这对我们项目的成功至关重要。