使用 DLL 创建要在 C# 中使用的数组

本文关键字:数组 DLL 创建 使用 | 更新日期: 2023-09-27 18:35:24

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

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

还是有没有办法直接删除 C# 中的数组?

还是 C# 在超出范围时自动删除它?

使用 DLL 创建要在 C# 中使用的数组

您需要

创建另一个函数来删除指针。C# 在超出范围时不会自动删除它,并且Microsoft公开了一些方法来删除对象,但它们适用于 Windows 句柄。E.x.:元帅自由HGlobal。

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