混合托管/非托管C ++?

时间:2012-05-18 21:56:55

标签: c++ c++-cli

我有一个用标准C ++编写的库。我还有一个用C#编写的.Net windows表单应用程序,它使用非托管库。

我知道我可以使用pinvoke,但我的C ++完全是OO而且我真的不想乱搞编组等。

有没有办法可以创建一个新的托管C ++ DLL项目,复制并粘贴我的头文件和代码文件,然后编译它并访问所有类?

或者我是否必须在托管c ++中创建一些ref类并将其连接到我的非托管类?我只是想让它变得尽可能简单。

谢谢!

2 个答案:

答案 0 :(得分:3)

即使在C ++ / CLI中,您仍然必须编写特定的.NET包装器,它们看起来不同。所以答案是,您可以将它放在C ++ / CLI项目中并重新编译并按原样使用它,不是。您仍然需要编组数据(在这种情况下,您可能也可能使用p / Invoke),或者您可以创建句柄并使用固定内存使您的结构可用于托管代码。

我已经两种方式完成了这项工作:我已经在CUDA C中编写了一个GPU库,并使用p / Invoke从F#调用它,并且我用C ++编写了一个视频处理库并编写了一个然后,瘦C ++ / CLI包装器在.NET应用程序中使用它。我认为CLI包装器更痛苦,但对于实时视频我需要更少的延迟(更少的复制内存)。对于GPU项目,我更关心吞吐量。

答案 1 :(得分:0)

您可能想要在C ++ / CLI中编写包装类。只要您返回句柄而不是指针,枚举器而不是集合等,这样做是相当简单的。