Но когда я пытаюсь освободить выделенную память в C# с помощью Marshal.FreeHGlobal(), я получаю сообщение об ошибке.
На самом деле я много ищу, как мне реализовать свой код с помощью этих функций. Я нашел решение, в котором говорится, что я должен написать в DLL функцию для освобождения памяти и вызвать эту функцию. Но мой менеджер сказал мне, что мне нужно выполнить эту работу на стороне C#. Поэтому я не могу использовать это решение. Кроме того, я нашел несколько других идей, в которых используется COM, но менеджер не хочет использовать COM. Поэтому я не могу использовать COM. Вот несколько кодов;
Выделение памяти в C#
Код: Выделить всё
var offset = 0;
var size = Marshal.SizeOf(typeof(dVehicle)) * denemeVehicle.Count();
IntPtr vehPnt;
vehPnt = Marshal.AllocHGlobal(size);
for(var i = 0; i < denemeVehicle.Count(); i++)
{
Marshal.StructureToPtr(denemeVehicle[i], new IntPtr(vehPnt.ToInt64() + offset), false);
offset += Marshal.SizeOf(typeof(dVehicle));
}
Код: Выделить всё
*vehicles = (dVehicle*) malloc(sizeof(dVehicle) * (new_VehSize));
Код: Выделить всё
Marshal.FreeHGlobal(vehPnt); // The error shows up in here
Неверный дескриптор. (Исключение из HRESULT: 0x80070006 (E_HANDLE))
Подробнее здесь: https://stackoverflow.com/questions/561 ... in-c-sharp
Мобильная версия