Выделение памяти в dll C++, бесплатно в C#C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Выделение памяти в dll C++, бесплатно в C#

Сообщение Anonymous »

Я новичок в C# и пытаюсь взаимодействовать с C# с dll C++. Моя основная цель — выделить память в C# с помощью Marshal.AllocHGlobal(), присвоить ей значения и передать ссылку IntPtr в dll C++. На стороне C++ dll я меняю размер выделенной памяти с помощью malloc(), назначаю переменные. В конце я печатаю значения на C#. До этого момента все работает нормально.

Но когда я пытаюсь освободить выделенную память в 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));
}
Изменение размера выделенной памяти в C++

Код: Выделить всё

*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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»