使用dll创建要在c中使用的数组# 我想用C++制作一个DLL,它有一个函数,它可以创建一个.bmp图像,通过使用C++来生成一个数组,使用新的< /C>,填充它,然后返回指针。 我想在c#项目中使用此函数,但使用后如何删除此数组

使用dll创建要在c中使用的数组# 我想用C++制作一个DLL,它有一个函数,它可以创建一个.bmp图像,通过使用C++来生成一个数组,使用新的< /C>,填充它,然后返回指针。 我想在c#项目中使用此函数,但使用后如何删除此数组,c#,c++,arrays,dll,C#,C++,Arrays,Dll,我是否在dll中创建另一个接收指针并删除它的函数 或者有没有办法直接删除c#中的数组 或者c#在指针超出范围时自动删除它?您需要创建另一个函数来删除指针。当它超出范围时,C#不会自动删除它,并且Microsoft公开了一些删除对象的方法,但这些方法用于windows句柄。E.x.:Marshal.FreeHGlobal.C#(.NET)不会自动删除指针(释放分配的内存),如果dll包含。释放非托管资源是您的责任(.NET可以在幕后为您执行此操作,如果它自己创建并使用任何非托管资源,但您的情况不同

我是否在dll中创建另一个接收指针并删除它的函数

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


或者c#在指针超出范围时自动删除它?

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

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

您必须导出一个函数,以便再次删除它。否则在C风格的接口中非常常见,这就是句柄的全部含义。