Фортрановые структуры и указатели - PullRequest
2 голосов
/ 25 августа 2009

У меня есть функция на C. Я хочу вызвать эту функцию из Fortran. Эта функция содержит 2 структуры, переданные указателем. Как мне это сделать на Фортране?

Пример:

struct a
{
    int x;
    float y;
};

struct b
{
    int p;
    float q;
};

В С:

fun(*a,*b);

Как мне позвонить с Фортрана? Здесь a - это структура ввода, а b - это структура вывода. Я могу заполнить структуры в Фортране, но они не могут поддерживать какие-либо данные после прохождения.

Как мне позвонить fun(*a,*b) на Фортране?

Ответы [ 2 ]

1 голос
/ 26 августа 2009

Если вы используете последнюю версию Fortran, то должна быть поддержка структур или записей, которые должны позволять вам вызывать C напрямую. Если вы используете Fortran77 или более раннюю версию, я бы написал интерфейсный метод в C, который бы принимал 4 аргумента: 2 для представления содержимого структуры a и 2 для представления структуры b Подпрограмма интерфейса будет обрабатывать заполнение входной структуры и получать результаты из выходной структуры в аргументы. Я бы соблазнился сделать это даже с современной версией Fortran, чтобы избежать потенциальных проблем с выделением и освобождением памяти. Например, если Фортрану возвращается память, выделенная в С, Фортран может не иметь возможности освободить его.

0 голосов
/ 25 августа 2009

Ответ будет зависеть от версии вашего Фортрана. Например, в GNU вы можете использовать функцию C_LOC , чтобы получить адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...