float * from C to C #

Я не совсем специалист по CS, так что если кто-нибудь из вас, гениев, может указать мне правильное направление, я буду бесконечно благодарен.

У меня есть функция командной строки c-code, которая используется для записи результатов в файл. Я преобразовал его так, чтобы он возвращал данные через массив с плавающей запятой * в программу на C ++, подобную такой (чтобы избежать ввода-вывода постоянного файла):

float * mgrib(int argc, char **argv)

Это сработало отлично. Теперь мне нужно внести это в программу на C #, и здесь все идет наперекосяк.

Первое, что я сделал, чтобы избежать char **, - это преобразовал аргументы в серию bool. Это сработало, если я позволю ему по-прежнему выгружать в файл.

Проблема заключается в подтасовке массива с плавающей запятой в стиле c в C #. В c-коде он был выделен с помощью malloc.

Итак, вот все, что я пробовал безуспешно (я знаю размер массива):

  1. Сделайте «бесплатную» функцию для экспорта для вызова из C # в освободи память, когда я закончу с ней. После нескольких циклов C # вылетает без предупреждения.

  2. Освободите malloc из C # с помощью Marshal.FreeCoTaskMem. Тот же результат.

  3. Переместите float * к аргументу и удалите c-код malloc. (void mgrib (..., float * data, ...)

__ a) Выделите его с помощью Marshal.AllocCoTaskMem. Освободите его с помощью Marshal.FreeCoTaskMem.

__ b) Используйте Marshal.Copy для выделения. Освободите его с помощью Marshal.FreeCoTaskMem (Может быть, это не так?)

Я пробовал практически все, что мог найти в Интернете. Пожалуйста, дайте мне знать, если потребуется дополнительная информация. Я надеюсь, что это просто простая концепция, которую мне не хватает.

7
задан Nate 8 March 2011 в 18:37
поделиться