我想用c ++创建一个dll,它有一个函数,通过使用c ++ new
创建一个数组来创建一个.bmp图像,填充它,然后返回指针。
我想在c#项目中使用此函数,但是如何在使用它之后删除该数组?
在我的dll中创建另一个函数,它接收一个指针并delete[]
吗?
或者有没有办法在c#中直接删除数组?
或c#在超出范围时会自动删除它吗?
答案 0 :(得分:0)
您需要创建另一个函数来删除指针。当C#超出范围时,C#不会自动删除它,并且微软公开了删除对象的一些方法,但它们用于Windows句柄。 E.x。:Marshal.FreeHGlobal。
答案 1 :(得分:0)
unmanaged code
,则C#(.NET)不会自动删除指针(释放已分配的内存)。释放非托管资源是您的责任(如果自己创建和使用任何非托管资源,.NET可以在幕后为您完成,但您的情况并不相同)。但是,即使您手动释放这些资源(在您的情况下分配内存),您应该考虑在您的DLL中提供自定义方法,而不是直接在调用方部分中调用delete。混合不同的CRT版本和环境不是一个好习惯。要了解原因,请访问此link。最好在你的dll中编写自定义分配器/ deallocater并将它们用于对象管理。