Вы хотите вызвать функцию C из программы Fortran. Есть много способов.
Одним из способов является перевод рутины С на фортран. Если ваша C-программа длинна, сложна и хорошо протестирована, то это может быть нелегким вариантом для вас. Другой способ - преобразовать фортран в C. Возможно, у вас схожие проблемы.
Если вы не можете обойти проблему, как указано выше, вам придется столкнуться с проблемой, как показано ниже.
На языке программирования это называется смешанным языком программирования.
Я не знаю, какую версию какого языка и OS U используете. Поэтому вместо того, чтобы дать готовое решение, я дам вам четыре альтернативных подхода ниже. Я использовал все в реализованных приложениях. Первые два предназначены для тех, кому повезло с мощной ОС (сейчас это редкий товар). Программа работает быстро и подходит для тяжелых работ в режиме реального времени. Последние два предназначены для любой ОС, но программа работает медленно, особенно если процедура C вызывается часто. Вы также должны сделать немного больше работы по программированию во всех подходах. Также помните, что ваша функция C возвращает указатель в каждой из альтернатив.
Некоторые компиляторы фортрана (не все) позволяют вызывать нефортранскую функцию. Это требует соответствующих средств в ОС, где работают и fortran, и C. В таких случаях идентичное управление стека используется во время вызова процедуры. Прочтите руководство для программистов на обоих языках и код соответствующим образом.
Если это невозможно, вы можете обмануть ОС, чтобы сделать это, но вам нужна промежуточная функция, написанная на Ассемблере. Вы вызываете подпрограмму ассемблера из fortran, а затем вызываете подпрограмму C из ассемблера и возвращаетесь в обратном порядке. Вам необходимо знать детали управления стеками всех трех компонентов, таких как Fortran, Assembler и C, и написать код для перевода стека fortran в C-стек. Это будет в рутине ассемблера.
При обоих вышеперечисленных подходах вы должны знать, как работает ваш компоновщик (или Binder), и вам, возможно, придется выполнять там некоторую дополнительную работу. В любом случае это будет тот же файл .exe, поэтому ваша программа будет работать быстро. В таких ОС любые языки, странные друг для друга, могут быть смешаны. Даже DLL могут быть использованы. Сложность возникает только в том случае, если библиотека времени выполнения использует функцию fortran, имеющую то же имя, что и функция C, но выполняющая разные задания. ОС, поддерживающая смешанное языковое программирование, обычно дает вам некоторые инструменты для предотвращения этого.
Если вышеупомянутые альтернативы неосуществимы, то сделайте обе программы на Fortran и C как отдельные .exe и запустите обе как два параллельных процесса. (обратите внимание, что они могут находиться на одном компьютере или на разных компьютерах под разными ОС даже!). Теперь всякий раз, когда вам нужно вызвать C из Фортрана, передайте все параметры и данные через любой доступный вам механизм межпроцессного взаимодействия, например, канал, сокет или что-то еще. Программа на C может возвращать данные по аналогичному механизму. Обязательно добавьте соответствующий код для обработки передачи параметров через межпроцессное взаимодействие. Синхронизация двух процессов и отличение старых данных от последних данных также ваша работа. Управление стеками не требуется.
Это для тех, кто не любит стек, синхронизацию, компоновщик или все, что требует интеллекта. Программы будут работать медленнее, если программа C будет вызываться часто. Неудобно, если программу на C нужно вызывать только один раз, то это тоже самое разумное решение! Вывод данных из фортрановой программы на диск (плоский файл или база данных). Затем вызовите программу на C для чтения из того же файла и возврата данных в фортран таким же образом. Будьте внимательны при закрытии файла перед сменой языка. Обрабатывать все ошибки в файлах вызовов ввода-вывода. В противном случае вы терпите крах.