为复杂的C+系统创建C#绑定+;上课? 我有一个C++的LIB,包含许多不同的类一起工作。一些示例用法应该包括将一个类的实例传递给另一个类的构造函数/方法之类的内容 我打算用C++/CLI为C++类提供一个C绑定,因此我不必移植整个C++代码。p> 我已经在“方法”中创建了另一个类,该类隐藏了用户现有C++代码中使用的所有类。然而,我想要的是向用户提供具有相同方法签名的相同类

为复杂的C+系统创建C#绑定+;上课? 我有一个C++的LIB,包含许多不同的类一起工作。一些示例用法应该包括将一个类的实例传递给另一个类的构造函数/方法之类的内容 我打算用C++/CLI为C++类提供一个C绑定,因此我不必移植整个C++代码。p> 我已经在“方法”中创建了另一个类,该类隐藏了用户现有C++代码中使用的所有类。然而,我想要的是向用户提供具有相同方法签名的相同类,c#,c++,binding,wrapper,C#,C++,Binding,Wrapper,对此有什么指导或建议吗 我已经研究了一些现有的开源C++对C++绑定项目。但是他们似乎使用了许多不同的方法来实现这一点,我并不真正理解。这其中很多都取决于类的分解 在我所做的工作中,我尝试将C++类I模型视为隐藏的实现细节,我将其封装到适当的C++/CLI类中。在大多数情况下,我可以通过使用不太细粒度的托管接口来解决这个问题。当您的实现涉及直接实现底层C++代码的每个细节时,那么最终将出现一个非常“健谈”的接口,它将涉及托管/非托管转换中的大量成本。 特别是,如果非托管C++类使用STL,特别是

对此有什么指导或建议吗


我已经研究了一些现有的开源C++对C++绑定项目。但是他们似乎使用了许多不同的方法来实现这一点,我并不真正理解。

这其中很多都取决于类的分解

在我所做的工作中,我尝试将C++类I模型视为隐藏的实现细节,我将其封装到适当的C++/CLI类中。在大多数情况下,我可以通过使用不太细粒度的托管接口来解决这个问题。当您的实现涉及直接实现底层C++代码的每个细节时,那么最终将出现一个非常“健谈”的接口,它将涉及托管/非托管转换中的大量成本。

特别是,如果非托管C++类使用STL,特别是STL集合类型,那么当您发现通过STL集合的每次迭代涉及多个托管/非托管转换时,您可能会发现自己遇到了一个令人不快的惊喜。我有一个图像解码器,它大量使用stl,因此运行起来就像狗一样。显然,在访问stl类型的代码周围加上#pragmas并没有什么帮助。我发现它的工作原理是将所有这些隐藏在一个基于句柄的C接口中,该接口将所有C++-ISM隐藏在一个铁幕后面。任何地方都没有公开stl意味着它可以作为非托管代码存在

我认为你最大的问题是如何处理集合(如果你使用任何东西)作为C++集合哲学,.NET集合哲学不太好。我怀疑你会花很多时间将改编的类的.NET集合映射到C++类的类集合中。 编辑
我不久前写过这个问题。它使用的是托管C++语言,而不是C++ + CLI,但问题是相同的。

< P>我曾经使用[dLimult]属性与C++进行了C++绑定。如果你没有任何一个STL问题,这里说的是你的LIB很简单(例如,作为一个DLL),我想这是最简单的绑定C++和C语言的方法。p>
MSDN上的一个简单示例:

+1-STL也让我感到不舒服。对于STL问题,这不是STL.NET试图解决的问题吗?()一点也不-STL.NET是一个基于STL设计的不同容器类。在这个例子中,有一个未知的C++类库,因为它是非托管的,根本不能使用STL.NET。任务仍然是一样的:将STL类型映射到.NET类型,如果您的体系结构没有考虑托管/非托管转换,则会造成性能瓶颈。谢谢!幸运的是STL没有涉及太多:)“像狗一样奔跑”-你的确切意思是什么?你不理解问题的主题。