Я на самом деле не парень из CS, поэтому, если кто-то из вас, гениев, сможет указать мне правильное направление, я буду вечно благодарен.
У меня есть функция командной строки c-кода, котораяиспользуется для записи своих результатов в файл.Я преобразовал его так, чтобы он возвращал данные через массив float * в программу на C ++, например, (чтобы избежать постоянного ввода-вывода файлов):
float * mgrib(int argc, char **argv)
Это сработало отлично.Теперь мне нужно включить это в программу на C #, и здесь дела идут плохо.
Первое, что я сделал, чтобы избежать символа **, - это сделал аргументы последовательностью bool.Это сработало нормально, если я позволю ему все еще записывать в файл.
Проблема заключается в манипулировании массивом с плавающей точкой в стиле C в C #.Внутри c-кода он был выделен с помощью malloc.
Итак, вот все, что я пытался безуспешно (я знаю размер массива):
Make«свободная» функция для экспорта в C # для вызова, чтобы освободить память, когда я закончу с ней.После нескольких циклов C # вылетает без предупреждения.
Освободить malloc из C # с Marshal.FreeCoTaskMem.Тот же результат.
Переместить float * в аргумент и удалить код malloc c.(void mgrib (..., float * data, ...)
__a) Выделите его с помощью Marshal.AllocCoTaskMem.Освободите его с помощью Marshal.FreeCoTaskMem.
__ b) Используйте Marshal.Copy для выделения.Освободите это с Marshal.FreeCoTaskMem (Может быть, это не так?)
Я баловался почти всем, что я мог найти в Интернете.Пожалуйста, дайте мне знать, если нужна дополнительная информация.Я надеюсь, что это просто простая концепция, которую мне не хватает.