使用dll创建要在c#中使用的数组

时间:2014-12-28 17:11:22

标签: c# c++ arrays dll

我想用c ++创建一个dll,它有一个函数,通过使用c ++ new创建一个数组来创建一个.bmp图像,填充它,然后返回指针。 我想在c#项目中使用此函数,但是如何在使用它之后删除该数组?

在我的dll中创建另一个函数,它接收一个指针并delete[]吗?

或者有没有办法在c#中直接删除数组?

或c#在超出范围时会自动删除它吗?

2 个答案:

答案 0 :(得分:0)

您需要创建另一个函数来删除指针。当C#超出范围时,C#不会自动删除它,并且微软公开了删除对象的一些方法,但它们用于Windows句柄。 E.x。:Marshal.FreeHGlobal。

答案 1 :(得分:0)

如果您的dll包含unmanaged code,则C#(.NET)不会自动删除指针(释放已分配的内存)。释放非托管资源是您的责任(如果自己创建和使用任何非托管资源,.NET可以在幕后为您完成,但您的情况并不相同)。但是,即使您手动释放这些资源(在您的情况下分配内存),您应该考虑在您的DLL中提供自定义方法,而不是直接在调用方部分中调用delete。混合不同的CRT版本和环境不是一个好习惯。要了解原因,请访问此link。最好在你的dll中编写自定义分配器/ deallocater并将它们用于对象管理。