在C#中使用C ++代码获取对象功能

时间:2009-04-17 19:51:53

标签: c# c++ interop object

我在C ++中编写了一个函数,它调用旧库中的某些函数。此函数创建一些内存使调用和销毁内存。为了优化这一点,我将创建一个对象来保持内存分配,直到对象被销毁。但是,我将从C#调用此函数,并且不相信我可以导出类,只是函数或变量。

我的想法是这样的;将DLL视为一个类,并使用dll范围内的本地变量来指向内存。然后有一个函数创建内存,调用worker函数,另一个函数在完成DLL时销毁内存。

这是一个好方法吗?还有更好的方法吗?

4 个答案:

答案 0 :(得分:2)

我更喜欢用C ++ / CLI(以前称为Managed C ++)编写托管包装器,因为它可以更容易地在C ++端显式执行您想要的托管/非托管互操作性,并且您的C#不会受到污染使用P / Invoke样式代码。

编辑刚刚注意到您的评论“但是我将从C#调用此函数,并且不相信我可以导出类,只是函数或变量。

这不完全正确 - C#可以从C ++ / CLI代码生成的程序集中导入完整的类。

答案 1 :(得分:1)

创建一个实现IDisposable的C#类。您可以围绕C ++对象包装一个简单的C API,因此在构造实例时,它会返回一个指向C ++类的指针,当您调用C#类的Dispose()时,它会删除指针。

您始终可以取消引用此指针以调用C ++类上的方法。

另一个好的选择是使用C ++ / CLI为您的C ++类创建一个包装器。处理这种情况要简单得多。

答案 2 :(得分:1)

如果您愿意更改本机C ++代码,您可以随时将其导出为C#可以使用的COM接口。

答案 3 :(得分:1)