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