Есть 2 бинарных файла.Один из них - родной / неуправляемый C ++ dll, а другой - управляемый c # exe.Теперь то, что я делаю, - это написание функции на языке dll c ++ и выделение памяти внутри нее с помощью malloc.Я экспортировал эту функцию для использования моим модулем c #.
В C ++ я сделал:
char* FunctionHavingAllocatedMemory(int i){
char* p = (char*)malloc(100);
.....
//use p and do not free it.
return p;
}
В c # я сделал:
[DllImport("C++.dll")]
private static extern string FunctionHavingAllocatedMemory(int i);
Теперь мой вопросis: есть ли необходимость освободить память в модуле c ++ или модуль c # автоматически освободит ее, когда функция вернется.Я думаю, что поскольку c # является управляемым модулем, он автоматически очищает память.
(Хотя это хорошо, что вы освобождаете память в c ++, но у меня есть определенные ограничения, что я не могу освободить память в C ++.больше узнать об управляемых приложениях и способах управления ими).